Starlike v0.4.0
88
.github/workflows/build.yml
vendored
@ -12,50 +12,92 @@ jobs:
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: "temurin"
|
||||
java-version: "21"
|
||||
cache: "gradle"
|
||||
distribution: 'temurin'
|
||||
java-version: '21'
|
||||
cache: 'gradle'
|
||||
- name: Validate Gradle Wrapper
|
||||
uses: gradle/actions/wrapper-validation@v3
|
||||
- name: Compile JavaScript
|
||||
run: ./gradlew generateJavaScript
|
||||
- name: Compile assets.epk
|
||||
run: bash ./CompileEPK.sh
|
||||
- name: Generate offline download
|
||||
run: bash ./MakeOfflineDownload.sh
|
||||
- name: Prepare web files
|
||||
uses: gradle/actions/wrapper-validation@v4
|
||||
- name: Compile client
|
||||
run: |
|
||||
mkdir -p ${{ runner.temp }}/gh-pages
|
||||
bash ./CompileEPK.sh &&
|
||||
bash ./CompileJS.sh &&
|
||||
bash ./MakeOfflineDownload.sh
|
||||
- name: Compile client (WASM)
|
||||
run: |
|
||||
cd ./wasm_gc_teavm &&
|
||||
bash ./CompileEPK.sh &&
|
||||
bash ./CompileWASM.sh &&
|
||||
bash ./CompileEagRuntimeJS.sh &&
|
||||
bash ./CompileBootstrapJS.sh &&
|
||||
bash ./CompileLoaderWASM.sh &&
|
||||
bash ./MakeWASMClientBundle.sh &&
|
||||
cd ..
|
||||
- name: Prepare files
|
||||
run: |
|
||||
mkdir -p ${{ runner.temp }}/gh-pages &&
|
||||
cp -t ${{ runner.temp }}/gh-pages \
|
||||
javascript/assets.epk \
|
||||
javascript/classes.js \
|
||||
javascript/classes.js.map \
|
||||
javascript/index.html
|
||||
cp javascript/Starlike_Client_Offline.html ${{ runner.temp }}/gh-pages/offline.html
|
||||
./LICENSE.md \
|
||||
./javascript/assets.epk \
|
||||
./javascript/assets.epw \
|
||||
./javascript/bootstrap.js \
|
||||
./javascript/classes.js \
|
||||
./javascript/classes.js.map \
|
||||
./javascript/index.html \
|
||||
./javascript/Starlike_Client_Offline.html \
|
||||
./javascript/Starlike_Client_Offline_WASM.html \
|
||||
./javascript/wasm.html
|
||||
- name: Upload web files
|
||||
continue-on-error: true
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: web
|
||||
path: ${{ runner.temp }}/gh-pages/
|
||||
name: Starlike_Client_Web
|
||||
path: ${{ runner.temp }}/gh-pages
|
||||
retention-days: 1
|
||||
compression-level: 9
|
||||
- name: Upload offline download
|
||||
continue-on-error: true
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: offline
|
||||
path: javascript/Starlike_Client_Offline.html
|
||||
name: Starlike_Client_Offline
|
||||
path: |
|
||||
${{ runner.temp }}/gh-pages/LICENSE.md
|
||||
${{ runner.temp }}/gh-pages/Starlike_Client_Offline.html
|
||||
${{ runner.temp }}/gh-pages/Starlike_Client_Offline_WASM.html
|
||||
retention-days: 1
|
||||
compression-level: 9
|
||||
- name: Deploy to GitHub Pages
|
||||
- name: Upload web files (WASM)
|
||||
continue-on-error: true
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Starlike_Client_Web_WASM
|
||||
path: |
|
||||
${{ runner.temp }}/gh-pages/LICENSE.md
|
||||
${{ runner.temp }}/gh-pages/assets.epw
|
||||
${{ runner.temp }}/gh-pages/bootstrap.js
|
||||
${{ runner.temp }}/gh-pages/Starlike_Client_Offline_WASM.html
|
||||
${{ runner.temp }}/gh-pages/wasm.html
|
||||
retention-days: 1
|
||||
compression-level: 9
|
||||
- name: Upload offline download (WASM)
|
||||
continue-on-error: true
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Starlike_Client_Offline_WASM
|
||||
path: |
|
||||
${{ runner.temp }}/gh-pages/LICENSE.md
|
||||
${{ runner.temp }}/gh-pages/Starlike_Client_Offline_WASM.html
|
||||
retention-days: 1
|
||||
compression-level: 9
|
||||
- name: Deploy to `gh-pages` branch
|
||||
if: github.ref == 'refs/heads/main'
|
||||
uses: peaceiris/actions-gh-pages@v4
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
publish_dir: ${{ runner.temp }}/gh-pages
|
||||
cname: starlike.zumbiepig.dev
|
||||
allow_empty_commit: true
|
||||
force_orphan: true
|
||||
user_name: 'github-actions[bot]'
|
||||
user_email: '41898282+github-actions[bot]@users.noreply.github.com'
|
||||
commit_message: 'github-actions: deploy'
|
||||
# disable_nojekyll: true
|
||||
cname: 'starlike.zumbiepig.dev'
|
||||
|
9
.gitignore
vendored
@ -24,7 +24,10 @@ javascript/Starlike_Client_Offline_Signed.html
|
||||
javascript/Starlike_Client_Offline_Signed.html.cert
|
||||
javascript/Starlike_Client_Offline_Signed.html.dat
|
||||
|
||||
.metadata
|
||||
javascript/assets.epw
|
||||
javascript/bootstrap.js
|
||||
javascript/favicon.png
|
||||
javascript/Starlike_Client_Offline_WASM.html
|
||||
|
||||
GenerateBlocks.py
|
||||
EaglerTools
|
||||
.metadata
|
||||
.DS_Store
|
||||
|
@ -3,4 +3,4 @@ title epkcompiler
|
||||
echo compiling, please wait...
|
||||
java -jar "desktopRuntime/CompileEPK.jar" "desktopRuntime/resources" "javascript/assets.epk"
|
||||
echo finished compiling epk
|
||||
pause
|
||||
pause
|
||||
|
11
CompileFull.bat
Normal file
@ -0,0 +1,11 @@
|
||||
call CompileEPK &&
|
||||
call CompileJS &&
|
||||
call MakeOfflineDownload &&
|
||||
cd wasm_gc_teavm &&
|
||||
call CompileEPK &&
|
||||
call CompileWASM &&
|
||||
call CompileEagRuntimeJS &&
|
||||
call CompileBootstrapJS &&
|
||||
call CompileLoaderWASM &&
|
||||
call MakeWASMClientBundle &&
|
||||
cd ..
|
12
CompileFull.sh
Executable file
@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
. ./CompileEPK.sh &&
|
||||
. ./CompileJS.sh &&
|
||||
. ./MakeOfflineDownload.sh &&
|
||||
cd ./wasm_gc_teavm &&
|
||||
. ./CompileEPK.sh &&
|
||||
. ./CompileWASM.sh &&
|
||||
. ./CompileEagRuntimeJS.sh &&
|
||||
. ./CompileBootstrapJS.sh &&
|
||||
. ./CompileLoaderWASM.sh &&
|
||||
. ./MakeWASMClientBundle.sh &&
|
||||
cd ..
|
@ -1,2 +1,3 @@
|
||||
#!/bin/sh
|
||||
./gradlew generateJavascript
|
||||
chmod +x gradlew
|
||||
./gradlew generateJavaScript
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
# EaglercraftX 1.8
|
||||
|
||||
### Play Minecraft 1.8 in your browser, supports singleplayer and multiplayer
|
||||
@ -7,28 +6,28 @@
|
||||
|
||||
### This repository contains:
|
||||
|
||||
- **Utilities to decompile Minecraft 1.8 and apply patch files to it**
|
||||
- **Source code to provide the LWJGL keyboard, mouse, and OpenGL APIs in a browser**
|
||||
- **Patch files to mod the Minecraft 1.8 source code to make it browser compatible**
|
||||
- **Browser-modified portions of Minecraft 1.8's open-source dependencies**
|
||||
- **Plugins for Minecraft servers to allow the eagler client to connect to them**
|
||||
- **Utilities to decompile Minecraft 1.8 and apply patch files to it**
|
||||
- **Source code to provide the LWJGL keyboard, mouse, and OpenGL APIs in a browser**
|
||||
- **Patch files to mod the Minecraft 1.8 source code to make it browser compatible**
|
||||
- **Browser-modified portions of Minecraft 1.8's open-source dependencies**
|
||||
- **Plugins for Minecraft servers to allow the eagler client to connect to them**
|
||||
|
||||
### This repository does NOT contain:
|
||||
|
||||
- **Any portion of the decompiled Minecraft 1.8 source code or resources**
|
||||
- **Any portion of Mod Coder Pack and it's config files**
|
||||
- **Data that can be used alone to reconstruct portions of the game's source code**
|
||||
- **Any portion of the decompiled Minecraft 1.8 source code or resources**
|
||||
- **Any portion of Mod Coder Pack and it's config files**
|
||||
- **Data that can be used alone to reconstruct portions of the game's source code**
|
||||
|
||||
## Getting Started:
|
||||
|
||||
### To compile the latest version of the client, on Windows:
|
||||
### To compile the latest version of the JavaScript client, on Windows:
|
||||
|
||||
1. Make sure you have at least Java 11 installed and added to your PATH, it is recommended to use Java 17
|
||||
2. Download (clone) this repository to your computer
|
||||
3. Double click `CompileLatestClient.bat`, a GUI resembling a classic windows installer should open
|
||||
4. Follow the steps shown to you in the new window to finish compiling
|
||||
|
||||
### To compile the latest version of the client, on Linux/macOS:
|
||||
### To compile the latest version of the JavaScript client, on Linux/macOS:
|
||||
|
||||
1. Make sure you have at least Java 11 installed, it is recommended to use Java 17
|
||||
2. Download (clone) this repository to your computer
|
||||
@ -37,9 +36,21 @@
|
||||
5. Type `./CompileLatestClient.sh` and hit enter, a GUI resembling a classic windows installer should open
|
||||
6. Follow the steps shown to you in the new window to finish compiling
|
||||
|
||||
### To set up the development environment
|
||||
|
||||
1. Prepare the required files in the mcp918 folder ([readme](mcp918/readme.txt))
|
||||
2. Run the `build_init` script
|
||||
3. Run the `build_make_workspace` script
|
||||
|
||||
## Browser Compatibility
|
||||
|
||||
EaglercraftX 1.8 is currently known to work on browsers as old as Chrome 38 on Windows XP, the game supports both WebGL 1.0 and WebGL 2.0 however features such as dynamic lighting and PBR shaders require WebGL 2.0. The game also supports mobile browsers that don't have a keyboard or mouse, the game will enter touch screen mode automatically when touch input is detected. The game also includes an embedded OGG codec (JOrbis) for loading audio files on iOS where the browsers don't support loading OGG files in an AudioContext.
|
||||
The JavaScript runtime of EaglercraftX 1.8 is currently known to work on browsers as old as Chrome 38 on Windows XP, the game supports both WebGL 1.0 and WebGL 2.0 however features such as dynamic lighting and PBR shaders require WebGL 2.0. The game also supports mobile browsers that don't have a keyboard or mouse, the game will enter touch screen mode automatically when touch input is detected. The game also includes an embedded OGG codec (JOrbis) for loading audio files on iOS where the browsers don't support loading OGG files in an AudioContext.
|
||||
|
||||
## WebAssembly GC Support
|
||||
|
||||
EaglercraftX 1.8 also has an experimental WebAssembly GC (WASM-GC) runtime, almost all of the features supported on the JavaScript runtime are also supported on the WebAssembly GC runtime, however it is still incompatible with several major browsers (especially Safari) and will not run in Chrome unless you can access the `chrome://flags` menu or request an origin trial token from Google for your website. Its based on experimental technology and may still crash sometimes due to browser bugs or unresolved issues in the Java to WASM compiler. Hopefully in the coming months the required feature (JSPI, WebAssembly JavaScript Promise Integration) will become enabled by default on the Chrome browser. It performs significantly better than the JavaScript client, around 50% more FPS and TPS in some cases, and will hopefully replace it someday. Just make sure you enable VSync when you play it, otherwise the game will run "too fast" and choke the browser's event loop, causing input lag.
|
||||
|
||||
You can compile the WebAssembly GC runtime by creating a development environment (workspace) and reading the README in the "wasm_gc_teavm" folder.
|
||||
|
||||
## Singleplayer
|
||||
|
||||
@ -55,7 +66,7 @@ If you would like to invite other players to join your singleplayer world and pl
|
||||
|
||||
Once you press "Start Shared World", EaglercraftX 1.8 will give you a "join code" (usually 5 letters) to share with your friends. On a different device, go the "Multiplayer" screen and press "Direct Connect" and press "Join Shared World", enter the join code given to you when you started the shared world and press "Join World". Given a few seconds, the client should successfully be able to join your shared world from any other device on the internet that also has unrestricted internet access. If it does not work, check the "Network Settings" screen and make sure you and your friends all have the same set of shared world relay URLs configured or your clients will not be able to find each other.
|
||||
|
||||
If you would like to host your own relay, the JAR file and instructions can be downloaded from the "Network Settings" screen in the client. EaglercraftX 1.8 uses the same "LAN world" relay server that is used by Eaglercraft 1.5.2, if you would like the relay source code find a random copy of the Eaglercraft 1.5.2 source code and it should be located in the "sp-relay" folder. The relay has not been updated since then, it has only been renamed from "LAN world relay" to "Shared world relay".
|
||||
If you would like to host your own relay, the JAR file and instructions can be downloaded from the "Network Settings" screen in the client. EaglercraftX 1.8 uses the same "LAN world" relay server that is used by Eaglercraft 1.5.2, however there have been several bug fixes. The current version is available in the `sp-relay/SharedWorldRelay` folder.
|
||||
|
||||
## PBR Shaders
|
||||
|
||||
@ -77,6 +88,8 @@ To make a server for EaglercraftX 1.8 the recommended software to use is Eaglerc
|
||||
|
||||
There is an experimental velocity plugin available in `gateway/EaglercraftXVelocity` but it is still in development and not recommended for public servers, so be sure to check for updates regularly if you use it. Configuration files are basically identical to EaglercraftXBungee so its safe to just directy copy in your old EaglercraftXBungee config files to the `plugins/eaglerxvelocity` folder and they should work with a minimal number of edits if you are migrating your network from BungeeCord to Velocity.
|
||||
|
||||
**Warning:** Both EaglerXBungee and EaglerXVelocity perform a lot of reflection that will inevitably break after a while when BungeeCord or Velocity is updated upstream. Both plugins will display the precise build number of BungeeCord and Velocity that has been tested by the developers and known to be compatible with EaglerXBungee and EaglerXVelocity when the proxy first starts up. If you are experiencing issues, try checking the BungeeCord or Velocity website for old versions and find the closest version number to whatever the current compatible version number is that is printed by EaglerXBungee/EaglerXVelocity, it will probably fix whatever missing functions the error messages are complaining about.
|
||||
|
||||
### Detailed READMEs
|
||||
|
||||
- [**EaglerXBungee README**](README_EAGLERXBUNGEE.md)
|
||||
@ -198,11 +211,12 @@ The default eaglercraftXOpts values is this:
|
||||
- `ramdiskMode:` if worlds and resource packs should be stored in RAM instead of IndexedDB
|
||||
- `singleThreadMode:` if the game should run the client and integrated server in the same context instead of creating a worker object
|
||||
- `enableEPKVersionCheck:` if the game should attempt to bypass the browser's cache and retry downloading assets.epk when its outdated
|
||||
- `enforceVSync:` (WASM only) if the game should automatically re-enable VSync at launch if its disabled
|
||||
- `hooks:` can be used to define JavaScript callbacks for certain events
|
||||
* `localStorageSaved:` JavaScript callback to save local storage keys (key, data)
|
||||
* `localStorageLoaded:` JavaScript callback to load local storage keys (key) returns data
|
||||
* `crashReportShow:` JavaScript callback when a crash report is shown (report, customMessageCB)
|
||||
* `screenChanged:` JavaScript callback when the screen changes/resizes (screenName, scaledWidth, scaledHeight, realWidth, realHeight, scaleFactor)
|
||||
- `localStorageSaved:` JavaScript callback to save local storage keys (key, data)
|
||||
- `localStorageLoaded:` JavaScript callback to load local storage keys (key) returns data
|
||||
- `crashReportShow:` JavaScript callback when a crash report is shown (report, customMessageCB)
|
||||
- `screenChanged:` JavaScript callback when the screen changes/resizes (screenName, scaledWidth, scaledHeight, realWidth, realHeight, scaleFactor)
|
||||
|
||||
### Using Hooks
|
||||
|
||||
@ -245,7 +259,7 @@ The `crashReportShow` hook can be used to capture crash reports and append addit
|
||||
|
||||
There is currently no system in place to make forks of 1.8 and merge commits made to the patch files in this repository with the patch files or workspace of the fork, you're on your own if you try to keep a fork of this repo for reasons other than to contribute to it
|
||||
|
||||
A javascript-based modding API resembling Minecraft Forge may be implemented someday though for adding custom content to the game.
|
||||
**Note:** If you are trying to use the desktop runtime on Linux, make sure you add the "desktopRuntime" folder to the `LD_LIBRARY_PATH` environment variable of the Java process. This should be done automatically by the Eclipse project's default run configuration, but it might not work properly on every system, or when the Eclipse project is imported into IntelliJ.
|
||||
|
||||
# EaglercraftX 1.8 Workspace
|
||||
|
||||
@ -258,17 +272,20 @@ A javascript-based modding API resembling Minecraft Forge may be implemented som
|
||||
Java must be added to your PATH!
|
||||
|
||||
**To compile the web client:**
|
||||
|
||||
1. Run `CompileEPK`
|
||||
2. Run `CompileJS` (or the `generateJavaScript` gradle task in your IDE)
|
||||
3. Check the "javascript" folder
|
||||
|
||||
**To compile an offline download:**
|
||||
|
||||
1. Run `CompileEPK`
|
||||
2. Run `CompileJS` (or the `generateJavaScript` gradle task in your IDE)
|
||||
3. Run `MakeOfflineDownload`
|
||||
4. Check the "javascript" folder
|
||||
|
||||
**To use the desktop runtime:**
|
||||
|
||||
1. Import the Eclipse project in "desktopRuntime/eclipseProject" into your IDE
|
||||
2. Open one of the .java files from the source folders (workaround for a bug)
|
||||
3. Run/Debug the client with the included "eaglercraftDebugRuntime" configuration
|
||||
@ -437,6 +454,7 @@ if(lightValue > 0.0) {
|
||||
```
|
||||
|
||||
**Correct:**
|
||||
|
||||
```glsl
|
||||
float lightValue = max(dot(lightDirection, normal), 0.0);
|
||||
color += lightValue * lightColor * diffuseColor;
|
||||
@ -462,7 +480,6 @@ float depthValue = textureLod(depthBuffer, pos, 0.0).r;
|
||||
|
||||
You can use a variety of different blending modes to mathematically combine the results of shaders. This is done for the same reason as flattening the control flow, to try and keep instruction pointers in sync by periodically resetting their positions, and also to allow for the driver to multitask better on GPUs with insane numbers of cores. It also allows the shader’s execution to be distributed across multiple frames in the case of something that doesn’t need to update often (like clouds).
|
||||
|
||||
|
||||
### 12. Don't abuse `@JSBody` in TeaVM code
|
||||
|
||||
TeaVM provides lots of ways of interacting with JavaScript, using `@JSBody` is not the only way, consider using an overlay type.
|
||||
@ -528,7 +545,7 @@ try(InputStream is = new FileInputStream(new File("phile.txt"))) {
|
||||
|
||||
Notice that the `.close()` can be omitted completely when using a try-with-resources
|
||||
|
||||
### 15. Always close compression/decompression streams
|
||||
### 15. Always close compression/decompression streams
|
||||
|
||||
In the desktop runtime, the default oracle JDK uses native code to implement the compression/decompression streams (InflaterInputStream, GZIPInputStream, etc) and therefore if you forget to close the compression/decompression stream it will cause a memory leak when the code isn't running in a browser. This is a common issue when using byte array input/output streams since you might believe when decompressing data from a byte array that there's no reason to close the stream when you're done since its not a file, but that will still cause a memory leak due to the decompression stream not being cleaned up.
|
||||
|
||||
|
251
EaglerTools/GenerateBlocks.mjs
Normal file
@ -0,0 +1,251 @@
|
||||
import path from 'path';
|
||||
import fs from 'fs/promises';
|
||||
|
||||
let blockId = 695; // replace with next id
|
||||
|
||||
const basePath = path.dirname(path.dirname(path.resolve(import.meta.filename)));
|
||||
const sourceFolder = path.join(basePath, 'EaglerTools', 'makeBlock');
|
||||
const starlikeAssetsFolder = path.join(
|
||||
basePath,
|
||||
'desktopRuntime',
|
||||
'resources',
|
||||
'assets',
|
||||
'starlike',
|
||||
);
|
||||
|
||||
const blockTextureFolder = path.join(
|
||||
starlikeAssetsFolder,
|
||||
'textures',
|
||||
'blocks',
|
||||
);
|
||||
const blockModelFolder = path.join(starlikeAssetsFolder, 'models', 'block');
|
||||
const itemModelFolder = path.join(starlikeAssetsFolder, 'models', 'item');
|
||||
const blockstateFolder = path.join(starlikeAssetsFolder, 'blockstates');
|
||||
const langFilePath = path.join(starlikeAssetsFolder, 'lang', 'en_US.lang');
|
||||
|
||||
const itemsStarlikeJavaPath = path.join(
|
||||
basePath,
|
||||
'src',
|
||||
'main',
|
||||
'java',
|
||||
'net',
|
||||
'starlikeclient',
|
||||
'minecraft',
|
||||
'init',
|
||||
'ItemsStarlike.java',
|
||||
);
|
||||
const blocksJavaPath = path.join(
|
||||
basePath,
|
||||
'src',
|
||||
'game',
|
||||
'java',
|
||||
'net',
|
||||
'minecraft',
|
||||
'init',
|
||||
'Blocks.java',
|
||||
);
|
||||
|
||||
async function createDirectories() {
|
||||
await fs.mkdir(blockTextureFolder, { recursive: true });
|
||||
await fs.mkdir(blockModelFolder, { recursive: true });
|
||||
await fs.mkdir(itemModelFolder, { recursive: true });
|
||||
await fs.mkdir(blockstateFolder, { recursive: true });
|
||||
}
|
||||
|
||||
async function insertInFile(
|
||||
filePath,
|
||||
searchText,
|
||||
insertText,
|
||||
insertAfter = true,
|
||||
tabBefore = false,
|
||||
) {
|
||||
try {
|
||||
const content = await fs.readFile(filePath, 'utf8');
|
||||
const lines = content.split('\n');
|
||||
|
||||
for (let i = 0; i < lines.length; i++) {
|
||||
if (lines[i].includes(searchText)) {
|
||||
let insertLine = insertText + '\n';
|
||||
if (tabBefore) {
|
||||
insertLine = '\t' + insertLine;
|
||||
}
|
||||
if (insertAfter) {
|
||||
lines.splice(i + 1, 0, insertLine);
|
||||
} else {
|
||||
lines.splice(i, 0, insertLine);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
await fs.writeFile(filePath, lines.join('\n'));
|
||||
console.log(`Updated ${filePath} successfully.`);
|
||||
return true;
|
||||
} catch (err) {
|
||||
console.error(`Error with file ${filePath}: ${err}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async function appendToFile(filePath, newLine) {
|
||||
try {
|
||||
await fs.appendFile(filePath, newLine + '\n');
|
||||
console.log(`Appended to ${filePath} successfully.`);
|
||||
} catch (err) {
|
||||
console.error(`Error appending to ${filePath}: ${err}`);
|
||||
}
|
||||
}
|
||||
|
||||
async function processBlocks() {
|
||||
console.log('Welcome to GenerateBlocks (EaglerTools)');
|
||||
console.log(
|
||||
'Drag the texture of the FULL block into the EaglerTools/makeBlock folder',
|
||||
);
|
||||
|
||||
try {
|
||||
const files = await fs.readdir(sourceFolder);
|
||||
|
||||
for (const filename of files) {
|
||||
if (!filename.endsWith('.png')) continue;
|
||||
|
||||
const blockName = path.parse(filename).name;
|
||||
const sourceImage = path.join(sourceFolder, filename);
|
||||
const destImage = path.join(blockTextureFolder, filename);
|
||||
|
||||
try {
|
||||
await fs.rename(sourceImage, destImage);
|
||||
console.log(`Moved image: ${filename} to ${destImage}`);
|
||||
|
||||
// Create blockstate data
|
||||
const blockModelData = {
|
||||
parent: 'block/cube_all',
|
||||
textures: {
|
||||
all: `starlike:blocks/${blockName}`,
|
||||
},
|
||||
};
|
||||
|
||||
// Create item model data
|
||||
const itemModelData = {
|
||||
parent: `starlike:block/${blockName}`,
|
||||
display: {
|
||||
thirdperson: {
|
||||
rotation: [10, -45, 170],
|
||||
translation: [0, 1.5, -2.75],
|
||||
scale: [0.375, 0.375, 0.375],
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Create blockstate JSON data
|
||||
const blockstateData = {
|
||||
variants: {
|
||||
normal: {
|
||||
model: `starlike:${blockName}`,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Write JSON files
|
||||
await fs.writeFile(
|
||||
path.join(blockModelFolder, `${blockName}.json`),
|
||||
JSON.stringify(blockModelData, null, 4),
|
||||
);
|
||||
|
||||
await fs.writeFile(
|
||||
path.join(itemModelFolder, `${blockName}.json`),
|
||||
JSON.stringify(itemModelData, null, 4),
|
||||
);
|
||||
|
||||
await fs.writeFile(
|
||||
path.join(blockstateFolder, `${blockName}.json`),
|
||||
JSON.stringify(blockstateData, null, 4),
|
||||
);
|
||||
|
||||
// Determine material properties
|
||||
let materialType = 'Material.rock';
|
||||
let hardness = '1.5f';
|
||||
let resistance = '10.0f';
|
||||
let soundType = 'soundTypePiston';
|
||||
|
||||
if (/log|planks|wood/.test(blockName)) {
|
||||
materialType = 'Material.wood';
|
||||
hardness = '0.5f';
|
||||
resistance = '10.0f';
|
||||
soundType = 'soundTypeWood';
|
||||
} else if (/steel|iron|grate|bar|copper|gold/.test(blockName)) {
|
||||
materialType = 'Material.iron';
|
||||
hardness = '5f';
|
||||
resistance = '10.0f';
|
||||
soundType = 'soundTypeMetal';
|
||||
} else if (/dirt|grass/.test(blockName)) {
|
||||
materialType = 'Material.ground';
|
||||
hardness = '0.5f';
|
||||
resistance = '1f';
|
||||
soundType = 'soundTypeGround';
|
||||
}
|
||||
|
||||
// Generate and insert Java code
|
||||
const registrationLine =
|
||||
`Block.registerBlock(${blockId}, "starlike:${blockName}", ` +
|
||||
`(new Block(${materialType}, MapColor.purpleColor)).setHardness(${hardness}).setResistance(${resistance}) ` +
|
||||
`.setStepSound(Block.${soundType}).setUnlocalizedName("${blockName}").setCreativeTab(CreativeTabs.tabStarlike));`;
|
||||
|
||||
await insertInFile(
|
||||
itemsStarlikeJavaPath,
|
||||
'//autogenerateequals',
|
||||
registrationLine,
|
||||
);
|
||||
|
||||
const blockDeclaration = ` public static Block ${blockName};`;
|
||||
const getRegisteredLine = ` ${blockName} = getRegisteredBlock("starlike:${blockName}");`;
|
||||
|
||||
await insertInFile(
|
||||
blocksJavaPath,
|
||||
'//autogeneratevar',
|
||||
blockDeclaration,
|
||||
);
|
||||
await insertInFile(
|
||||
blocksJavaPath,
|
||||
'//autogenerateequals',
|
||||
getRegisteredLine,
|
||||
);
|
||||
|
||||
const itemBlockRegistration = `Item.registerItemBlock(Blocks.${blockName});`;
|
||||
await insertInFile(
|
||||
itemsStarlikeJavaPath,
|
||||
'//autogenerateregisterblock',
|
||||
itemBlockRegistration,
|
||||
true,
|
||||
true,
|
||||
);
|
||||
|
||||
const itemBlockRenderRegistration = `e.registerBlock(Blocks.${blockName},"starlike:${blockName}");`;
|
||||
await insertInFile(
|
||||
itemsStarlikeJavaPath,
|
||||
'//autogeneraterender',
|
||||
itemBlockRenderRegistration,
|
||||
true,
|
||||
true,
|
||||
);
|
||||
|
||||
const langEntry = `tile.${blockName}.name=${
|
||||
blockName.replace('_', ' ').charAt(0).toUpperCase() +
|
||||
blockName.slice(1)
|
||||
}`;
|
||||
await appendToFile(langFilePath, langEntry);
|
||||
|
||||
blockId++;
|
||||
} catch (err) {
|
||||
console.error(`Error processing ${filename}: ${err}`);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(`Error reading source folder: ${err}`);
|
||||
}
|
||||
}
|
||||
|
||||
// Run the script
|
||||
createDirectories()
|
||||
.then(() => processBlocks())
|
||||
.catch((err) => console.error('Error:', err));
|
173
EaglerTools/GenerateBlocks.py
Normal file
@ -0,0 +1,173 @@
|
||||
import os
|
||||
import shutil
|
||||
import json
|
||||
|
||||
base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
source_folder = os.path.join(base_path,"EaglerTools", "makeBlock")
|
||||
block_texture_folder = os.path.join(base_path, "desktopRuntime", "resources", "assets", "starlike", "textures", "blocks")
|
||||
block_model_folder = os.path.join(base_path, "desktopRuntime", "resources", "assets", "starlike", "models", "block")
|
||||
item_model_folder = os.path.join(base_path, "desktopRuntime", "resources", "assets", "starlike", "models", "item")
|
||||
blockstate_folder = os.path.join(base_path,"desktopRuntime", "resources", "assets","starlike", "blockstates")
|
||||
lang_file_path = os.path.join(base_path,"desktopRuntime", "resources", "assets","starlike", "lang", "en_US.lang")
|
||||
|
||||
os.makedirs(block_texture_folder, exist_ok=True)
|
||||
os.makedirs(block_model_folder, exist_ok=True)
|
||||
os.makedirs(item_model_folder, exist_ok=True)
|
||||
os.makedirs(blockstate_folder, exist_ok=True)
|
||||
|
||||
|
||||
items_starlike_java_path = os.path.join(
|
||||
base_path, "src", "main", "java", "net", "starlikeclient", "minecraft", "init", "ItemsStarlike.java"
|
||||
)
|
||||
blocks_java_path = os.path.join(base_path,"src", "game", "java", "net", "minecraft", "init", "Blocks.java")
|
||||
|
||||
blockId = 695; #replace with next id
|
||||
def insert_in_file(file_path, search_text, insert_text, insert_after=True, tab_before=False):
|
||||
try:
|
||||
with open(file_path, 'r') as file:
|
||||
lines = file.readlines()
|
||||
except Exception as e:
|
||||
print(f"Error reading {file_path}: {e}")
|
||||
return False
|
||||
|
||||
for i, line in enumerate(lines):
|
||||
if search_text in line:
|
||||
insert_line = insert_text + '\n'
|
||||
if tab_before:
|
||||
insert_line = '\t' + insert_line
|
||||
if insert_after:
|
||||
lines.insert(i + 1, insert_line)
|
||||
else:
|
||||
lines.insert(i, insert_line)
|
||||
break
|
||||
|
||||
try:
|
||||
with open(file_path, 'w') as file:
|
||||
file.writelines(lines)
|
||||
print(f"Updated {file_path} successfully.")
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Error writing to {file_path}: {e}")
|
||||
return False
|
||||
|
||||
def append_to_file(file_path, new_line):
|
||||
try:
|
||||
with open(file_path, 'a') as file:
|
||||
file.write(new_line + '\n')
|
||||
print(f"Appended to {file_path} successfully.")
|
||||
except Exception as e:
|
||||
print(f"Error appending to {file_path}: {e}")
|
||||
|
||||
print("Welcome to GenerateBlocks (EaglerTools)")
|
||||
print("Drag the texture of the FULL block into the ")
|
||||
for filename in os.listdir(source_folder):
|
||||
if filename.endswith(".png"):
|
||||
|
||||
block_name = os.path.splitext(filename)[0]
|
||||
|
||||
source_image = os.path.join(source_folder, filename)
|
||||
dest_image = os.path.join(block_texture_folder, filename)
|
||||
|
||||
try:
|
||||
shutil.move(source_image, dest_image)
|
||||
print(f"Moved image: {filename} to {dest_image}")
|
||||
except Exception as e:
|
||||
print(f"Error moving file {filename}: {e}")
|
||||
continue
|
||||
|
||||
blockstate_data = {
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": f"starlike:blocks/{block_name}"
|
||||
}
|
||||
}
|
||||
blockstate_path = os.path.join(block_model_folder, f"{block_name}.json")
|
||||
try:
|
||||
with open(blockstate_path, 'w') as blockstate_file:
|
||||
json.dump(blockstate_data, blockstate_file, indent=4)
|
||||
print(f"Created blockstate JSON: {blockstate_path}")
|
||||
except Exception as e:
|
||||
print(f"Error writing blockstate JSON for {block_name}: {e}")
|
||||
continue
|
||||
|
||||
item_model_data = {
|
||||
"parent": f"starlike:block/{block_name}",
|
||||
"display": {
|
||||
"thirdperson": {
|
||||
"rotation": [10, -45, 170],
|
||||
"translation": [0, 1.5, -2.75],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
}
|
||||
}
|
||||
}
|
||||
item_model_path = os.path.join(item_model_folder, f"{block_name}.json")
|
||||
try:
|
||||
with open(item_model_path, 'w') as item_model_file:
|
||||
json.dump(item_model_data, item_model_file, indent=4)
|
||||
print(f"Created item model JSON: {item_model_path}")
|
||||
except Exception as e:
|
||||
print(f"Error writing item model JSON for {block_name}: {e}")
|
||||
continue
|
||||
|
||||
blockstate_json_data = {
|
||||
"variants": {
|
||||
"normal": {
|
||||
"model": f"starlike:{block_name}"
|
||||
}
|
||||
}
|
||||
}
|
||||
blockstate_json_path = os.path.join(blockstate_folder, f"{block_name}.json")
|
||||
try:
|
||||
with open(blockstate_json_path, 'w') as blockstate_json_file:
|
||||
json.dump(blockstate_json_data, blockstate_json_file, indent=4)
|
||||
print(f"Created blockstate JSON: {blockstate_json_path}")
|
||||
except Exception as e:
|
||||
print(f"Error writing blockstate JSON for {block_name}: {e}")
|
||||
continue
|
||||
|
||||
material_type = "Material.wood"
|
||||
hardness = "0.5f"
|
||||
resistance = "5.0f"
|
||||
soundType = "soundTypePiston"
|
||||
if any(keyword in block_name for keyword in ["log", "planks", "wood"]):
|
||||
material_type = "Material.wood"
|
||||
hardness = "0.5f"
|
||||
resistance = "10.0f"
|
||||
soundType = "soundTypeWood"
|
||||
elif any(keyword in block_name for keyword in ["steel", "iron", "grate", "bar", "copper", "gold"]):
|
||||
material_type = "Material.iron"
|
||||
hardness = "5f"
|
||||
resistance = "10.0f"
|
||||
soundType = "soundTypeMetal"
|
||||
elif any(keyword in block_name for keyword in ["dirt", "grass"]):
|
||||
material_type = "Material.ground"
|
||||
hardness = "0.5f"
|
||||
resistance = "1f"
|
||||
soundType = "soundTypeGround"
|
||||
else:
|
||||
material_type = "Material.rock"
|
||||
hardness = "1.5f"
|
||||
resistance = "10.0f"
|
||||
soundType = "soundTypePiston"
|
||||
|
||||
registration_line = (
|
||||
f"Block.registerBlock({blockId}, \"starlike:{block_name}\", "
|
||||
f"(new Block({material_type}, MapColor.purpleColor)).setHardness({hardness}).setResistance({resistance}) "
|
||||
f".setStepSound(Block.{soundType}).setUnlocalizedName(\"{block_name}\").setCreativeTab(CreativeTabs.tabStarlike));"
|
||||
)
|
||||
insert_in_file(items_starlike_java_path, "//autogenerateequals", registration_line)
|
||||
|
||||
block_declaration = f" public static Block {block_name};"
|
||||
get_registered_line = f" {block_name} = getRegisteredBlock(\"starlike:{block_name}\");"
|
||||
insert_in_file(blocks_java_path, "//autogeneratevar", block_declaration)
|
||||
insert_in_file(blocks_java_path, "//autogenerateequals", get_registered_line)
|
||||
|
||||
item_block_registration = f"Item.registerItemBlock(Blocks.{block_name});"
|
||||
insert_in_file(items_starlike_java_path, "//autogenerateregisterblock", item_block_registration, tab_before=True)
|
||||
item_block_render_registration = f'e.registerBlock(Blocks.{block_name},"starlike:{block_name}");'
|
||||
insert_in_file(items_starlike_java_path, "//autogeneraterender", item_block_render_registration, tab_before=True)
|
||||
lang_entry = f"tile.{block_name}.name={block_name.replace('_', ' ').capitalize()}"
|
||||
append_to_file(lang_file_path, lang_entry)
|
||||
blockId += 1
|
||||
|
@ -4,15 +4,17 @@ Copyright (c) 2024 zumbiepig and SpeedSlicer
|
||||
|
||||
## 1. Attribution
|
||||
|
||||
If you use any part of this code in your project, you **must credit** the original author, zumbiepig and SpeedSlicer, in a clearly visible manner in both the project documentation and the software interface, including but not limited to:
|
||||
If you use any part of this code in your project, you **must credit** the original authors, zumbiepig and SpeedSlicer, in a clearly visible manner in both the project documentation and the software interface, including but not limited to:
|
||||
|
||||
- **Credits section** in documentation
|
||||
- **Main menu or splash screen** within the application
|
||||
|
||||
The **main menu** of the software or application **must not be changed** without written permission from zumbiepig and SpeedSlicer.
|
||||
The **main menu** of the software or application **must not be changed** without written permission from _both_ zumbiepig and SpeedSlicer.
|
||||
|
||||
## 2. Open Source Requirement for Derivative Works
|
||||
|
||||
If you create any derivative work (a "fork") based on this project:
|
||||
|
||||
- You **must release the source code** of the derivative work under this same license, ensuring that all forks and modifications remain open source.
|
||||
- You **must clearly state** that the original code is based on work by zumbiepig and SpeedSlicer.
|
||||
|
||||
@ -28,6 +30,4 @@ This software is provided "as is", without any warranty of any kind, express or
|
||||
|
||||
---
|
||||
|
||||
License written by HoosierTransfer
|
||||
|
||||
By using this code, you agree to the terms of this license.
|
||||
|
@ -1,4 +1,4 @@
|
||||
@echo off
|
||||
title MakeSignedClient
|
||||
java -cp "desktopRuntime/MakeOfflineDownload.jar;desktopRuntime/CompileEPK.jar" net.lax1dude.eaglercraft.v1_8.buildtools.workspace.MakeSignedClient "desktopRuntime/resources/SignedBundleTemplate.txt" "javascript/classes.js" "javascript/assets.epk" "desktopRuntime/resources/SignedClientTemplate.txt" "desktopRuntime/resources/UpdateDownloadSources.txt" "javascript/Starlike_Client_Offline_Signed.html"
|
||||
pause
|
||||
pause
|
||||
|
@ -1,4 +0,0 @@
|
||||
SIGNED_CLIENT_INTEGER="301"
|
||||
SIGNED_CLIENT_VERSION="0.3.1"
|
||||
SIGNED_CLIENT_CHANGELOG="View the changelog in the Discord server"
|
||||
|
@ -58,15 +58,16 @@ teavm.js {
|
||||
|
||||
tasks.named("generateJavaScript") {
|
||||
doLast {
|
||||
|
||||
delete file(folder + "/js")
|
||||
|
||||
// NOTE: This step may break at any time, and is not required for 99% of browsers
|
||||
|
||||
|
||||
def phile = file(folder + "/" + name)
|
||||
def dest = phile.getText("UTF-8")
|
||||
def i = dest.substring(0, dest.indexOf("=\$rt_globals.Symbol('jsoClass');")).lastIndexOf("let ")
|
||||
dest = dest.substring(0, i) + "var" + dest.substring(i + 3)
|
||||
def j = dest.indexOf("function(\$rt_globals,\$rt_exports){")
|
||||
dest = dest.substring(0, j + 34) + "\n" + file(folder + "/ES6ShimScript.txt").getText("UTF-8") + "\n" + dest.substring(j + 34)
|
||||
dest = dest.substring(0, j + 34) + "\n" + file("desktopRuntime/resources/ES6ShimScript.txt").getText("UTF-8") + "\n" + dest.substring(j + 34)
|
||||
phile.write(dest, "UTF-8")
|
||||
}
|
||||
}
|
||||
|
1
designModels/starlike/sc.bbmodel
Normal file
1
designModels/starlike/starlike-starlike.bbmodel
Normal file
1
designModels/starlike/starlikeclient-com.bbmodel
Normal file
1
designModels/watcher/Watcher.bbmodel
Normal file
46
designModels/watcher/watcher.java
Normal file
@ -0,0 +1,46 @@
|
||||
// Made with Blockbench 4.11.2
|
||||
// Exported for Minecraft version 1.7 - 1.12
|
||||
// Paste this class into your mod and generate all required imports
|
||||
|
||||
|
||||
public class Watcher extends ModelBase {
|
||||
private final ModelRenderer leg2;
|
||||
private final ModelRenderer leg3;
|
||||
private final ModelRenderer head;
|
||||
private final ModelRenderer leg;
|
||||
|
||||
public Watcher() {
|
||||
textureWidth = 64;
|
||||
textureHeight = 64;
|
||||
|
||||
leg2 = new ModelRenderer(this);
|
||||
leg2.setRotationPoint(0.0F, 24.0F, 0.0F);
|
||||
leg2.cubeList.add(new ModelBox(leg2, 20, 17, -4.0F, -6.0F, -12.0F, 2, 2, 8, 0.0F, false));
|
||||
|
||||
leg3 = new ModelRenderer(this);
|
||||
leg3.setRotationPoint(-3.0F, 0.0F, -5.0F);
|
||||
leg3.cubeList.add(new ModelBox(leg3, 0, 27, 4.0F, 16.0F, -7.0F, 2, 2, 8, 0.0F, false));
|
||||
|
||||
head = new ModelRenderer(this);
|
||||
head.setRotationPoint(-3.0F, 0.0F, -5.0F);
|
||||
head.cubeList.add(new ModelBox(head, 0, 0, -1.0F, 16.0F, 1.0F, 8, 8, 9, 0.0F, false));
|
||||
|
||||
leg = new ModelRenderer(this);
|
||||
leg.setRotationPoint(0.0F, 24.0F, 0.0F);
|
||||
leg.cubeList.add(new ModelBox(leg, 0, 17, -1.0F, -3.0F, -12.0F, 2, 2, 8, 0.0F, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) {
|
||||
leg2.render(f5);
|
||||
leg3.render(f5);
|
||||
head.render(f5);
|
||||
leg.render(f5);
|
||||
}
|
||||
|
||||
public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) {
|
||||
modelRenderer.rotateAngleX = x;
|
||||
modelRenderer.rotateAngleY = y;
|
||||
modelRenderer.rotateAngleZ = z;
|
||||
}
|
||||
}
|
BIN
designModels/watcher/watcher.png
Normal file
After Width: | Height: | Size: 391 B |
@ -26,4 +26,4 @@ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
@ -511,4 +511,4 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
@ -29,4 +29,4 @@ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
@ -15,16 +15,21 @@
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
<linkedResources>
|
||||
<link>
|
||||
<name>src_main_java</name>
|
||||
<type>2</type>
|
||||
<locationURI>PARENT-2-PROJECT_LOC../src/main/java</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src_game_java</name>
|
||||
<type>2</type>
|
||||
<locationURI>PARENT-2-PROJECT_LOC../src/game/java</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src_lwjgl_java</name>
|
||||
<type>2</type>
|
||||
<locationURI>PARENT-2-PROJECT_LOC../src/lwjgl/java</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src_main_java</name>
|
||||
<type>2</type>
|
||||
<locationURI>PARENT-2-PROJECT_LOC../src/main/java</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src_protocol-game_java</name>
|
||||
<type>2</type>
|
||||
@ -35,10 +40,16 @@
|
||||
<type>2</type>
|
||||
<locationURI>PARENT-2-PROJECT_LOC../src/protocol-relay/java</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>src_lwjgl_java</name>
|
||||
<type>2</type>
|
||||
<locationURI>PARENT-2-PROJECT_LOC../src/lwjgl/java</locationURI>
|
||||
</link>
|
||||
</linkedResources>
|
||||
<filteredResources>
|
||||
<filter>
|
||||
<id>1734217596828</id>
|
||||
<name></name>
|
||||
<type>30</type>
|
||||
<matcher>
|
||||
<id>org.eclipse.core.resources.regexFilterMatcher</id>
|
||||
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
|
||||
</matcher>
|
||||
</filter>
|
||||
</filteredResources>
|
||||
</projectDescription>
|
||||
|
@ -1,4 +1,9 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
|
||||
org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull
|
||||
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault
|
||||
org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable
|
||||
org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
@ -10,6 +15,12 @@ org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning
|
||||
org.eclipse.jdt.core.compiler.problem.nullReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning
|
||||
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignore
|
||||
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
|
||||
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled
|
||||
org.eclipse.jdt.core.compiler.release=disabled
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
||||
|
@ -7,6 +7,9 @@
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||
<listEntry value="1"/>
|
||||
</listAttribute>
|
||||
<mapAttribute key="org.eclipse.debug.core.environmentVariables">
|
||||
<mapEntry key="LD_LIBRARY_PATH" value="${project_loc}/../"/>
|
||||
</mapAttribute>
|
||||
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
|
||||
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
|
||||
<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
|
||||
@ -17,6 +20,7 @@
|
||||
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="net.lax1dude.eaglercraft.v1_8.internal.lwjgl.MainClass"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="eclipseProject"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="hide-renderdoc"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="eclipseProject"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djava.library.path=."/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc}/../"/>
|
||||
|
147
desktopRuntime/eclipseProject/starlike_basic_format.xml
Normal file
@ -0,0 +1,147 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<profiles version="2">
|
||||
<profile kind="CleanUpProfile" name="Starlike: Basic format" version="2">
|
||||
<setting id="cleanup.use_autoboxing" value="false"/>
|
||||
<setting id="cleanup.remove_redundant_semicolons" value="false"/>
|
||||
<setting id="cleanup.system_property_file_separator" value="false"/>
|
||||
<setting id="cleanup.objects_equals" value="false"/>
|
||||
<setting id="cleanup.primitive_parsing" value="false"/>
|
||||
<setting id="cleanup.remove_trailing_whitespaces" value="true"/>
|
||||
<setting id="cleanup.remove_unused_private_fields" value="false"/>
|
||||
<setting id="cleanup.try_with_resource" value="false"/>
|
||||
<setting id="cleanup.system_property" value="false"/>
|
||||
<setting id="cleanup.add_missing_nls_tags" value="false"/>
|
||||
<setting id="cleanup.stringbuilder" value="false"/>
|
||||
<setting id="cleanup.push_down_negation" value="false"/>
|
||||
<setting id="cleanup.system_property_path_separator" value="false"/>
|
||||
<setting id="cleanup.also_simplify_lambda" value="false"/>
|
||||
<setting id="cleanup.use_var" value="false"/>
|
||||
<setting id="cleanup.use_blocks_only_for_return_and_throw" value="false"/>
|
||||
<setting id="cleanup.convert_functional_interfaces" value="false"/>
|
||||
<setting id="cleanup.make_type_abstract_if_missing_method" value="false"/>
|
||||
<setting id="cleanup.remove_private_constructors" value="false"/>
|
||||
<setting id="cleanup.evaluate_nullable" value="false"/>
|
||||
<setting id="cleanup.strictly_equal_or_different" value="false"/>
|
||||
<setting id="cleanup.system_property_boolean" value="false"/>
|
||||
<setting id="cleanup.embedded_if" value="false"/>
|
||||
<setting id="cleanup.join" value="false"/>
|
||||
<setting id="cleanup.return_expression" value="false"/>
|
||||
<setting id="cleanup.remove_unnecessary_casts" value="false"/>
|
||||
<setting id="cleanup.redundant_falling_through_block_end" value="false"/>
|
||||
<setting id="cleanup.overridden_assignment_move_decl" value="false"/>
|
||||
<setting id="cleanup.always_use_parentheses_in_expressions" value="false"/>
|
||||
<setting id="cleanup.use_parentheses_in_expressions" value="false"/>
|
||||
<setting id="cleanup.multi_catch" value="false"/>
|
||||
<setting id="cleanup.if_condition" value="false"/>
|
||||
<setting id="cleanup.comparison_statement" value="false"/>
|
||||
<setting id="cleanup.use_this_for_non_static_method_access_only_if_necessary" value="true"/>
|
||||
<setting id="cleanup.use_unboxing" value="false"/>
|
||||
<setting id="cleanup.bitwise_conditional_expression" value="false"/>
|
||||
<setting id="cleanup.remove_trailing_whitespaces_ignore_empty" value="false"/>
|
||||
<setting id="cleanup.instanceof" value="false"/>
|
||||
<setting id="cleanup.correct_indentation" value="true"/>
|
||||
<setting id="cleanup.make_private_fields_final" value="false"/>
|
||||
<setting id="cleanup.boolean_value_rather_than_comparison" value="false"/>
|
||||
<setting id="cleanup.qualify_static_member_accesses_with_declaring_class" value="false"/>
|
||||
<setting id="cleanup.no_string_creation" value="false"/>
|
||||
<setting id="cleanup.add_missing_override_annotations_interface_methods" value="true"/>
|
||||
<setting id="cleanup.substring" value="false"/>
|
||||
<setting id="cleanup.lazy_logical_operator" value="false"/>
|
||||
<setting id="cleanup.remove_unused_method_parameters" value="false"/>
|
||||
<setting id="cleanup.valueof_rather_than_instantiation" value="false"/>
|
||||
<setting id="cleanup.qualify_static_field_accesses_with_declaring_class" value="false"/>
|
||||
<setting id="cleanup.pull_out_if_from_if_else" value="false"/>
|
||||
<setting id="cleanup.use_anonymous_class_creation" value="false"/>
|
||||
<setting id="cleanup.stringconcat_stringbuffer_stringbuilder" value="false"/>
|
||||
<setting id="cleanup.convert_to_enhanced_for_loop_if_loop_var_used" value="false"/>
|
||||
<setting id="cleanup.replace_deprecated_calls" value="false"/>
|
||||
<setting id="cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class" value="false"/>
|
||||
<setting id="cleanup.break_loop" value="false"/>
|
||||
<setting id="cleanup.useless_continue" value="false"/>
|
||||
<setting id="cleanup.instanceof_keyword" value="false"/>
|
||||
<setting id="cleanup.standard_comparison" value="false"/>
|
||||
<setting id="cleanup.format_source_code" value="true"/>
|
||||
<setting id="cleanup.remove_unused_imports" value="true"/>
|
||||
<setting id="cleanup.use_lambda" value="true"/>
|
||||
<setting id="cleanup.map_cloning" value="false"/>
|
||||
<setting id="cleanup.no_super" value="false"/>
|
||||
<setting id="cleanup.extract_increment" value="false"/>
|
||||
<setting id="cleanup.always_use_this_for_non_static_field_access" value="false"/>
|
||||
<setting id="cleanup.add_missing_annotations" value="true"/>
|
||||
<setting id="cleanup.primitive_rather_than_wrapper" value="false"/>
|
||||
<setting id="cleanup.remove_unnecessary_nls_tags" value="false"/>
|
||||
<setting id="cleanup.remove_unused_private_methods" value="false"/>
|
||||
<setting id="cleanup.qualify_static_member_accesses_through_instances_with_declaring_class" value="false"/>
|
||||
<setting id="cleanup.always_use_this_for_non_static_method_access" value="false"/>
|
||||
<setting id="cleanup.primitive_serialization" value="false"/>
|
||||
<setting id="cleanup.sort_members" value="true"/>
|
||||
<setting id="cleanup.insert_inferred_type_arguments" value="false"/>
|
||||
<setting id="cleanup.add_missing_override_annotations" value="true"/>
|
||||
<setting id="cleanup.system_property_line_separator" value="false"/>
|
||||
<setting id="cleanup.static_inner_class" value="false"/>
|
||||
<setting id="cleanup.use_directly_map_method" value="false"/>
|
||||
<setting id="cleanup.add_all" value="false"/>
|
||||
<setting id="cleanup.convert_to_enhanced_for_loop" value="false"/>
|
||||
<setting id="cleanup.single_used_field" value="false"/>
|
||||
<setting id="cleanup.collection_cloning" value="false"/>
|
||||
<setting id="cleanup.comparing_on_criteria" value="false"/>
|
||||
<setting id="cleanup.stringbuffer_to_stringbuilder" value="false"/>
|
||||
<setting id="cleanup.do_while_rather_than_while" value="true"/>
|
||||
<setting id="cleanup.remove_unused_private_types" value="false"/>
|
||||
<setting id="cleanup.make_variable_declarations_final" value="false"/>
|
||||
<setting id="cleanup.merge_conditional_blocks" value="false"/>
|
||||
<setting id="cleanup.never_use_parentheses_in_expressions" value="true"/>
|
||||
<setting id="cleanup.use_blocks" value="false"/>
|
||||
<setting id="cleanup.array_with_curly" value="false"/>
|
||||
<setting id="cleanup.remove_unnecessary_array_creation" value="false"/>
|
||||
<setting id="cleanup.add_missing_deprecated_annotations" value="true"/>
|
||||
<setting id="cleanup.operand_factorization" value="false"/>
|
||||
<setting id="cleanup.qualify_static_method_accesses_with_declaring_class" value="false"/>
|
||||
<setting id="cleanup.remove_trailing_whitespaces_all" value="true"/>
|
||||
<setting id="cleanup.convert_to_switch_expressions" value="false"/>
|
||||
<setting id="cleanup.remove_redundant_type_arguments" value="false"/>
|
||||
<setting id="cleanup.number_suffix" value="false"/>
|
||||
<setting id="cleanup.redundant_comparator" value="false"/>
|
||||
<setting id="cleanup.remove_unused_private_members" value="false"/>
|
||||
<setting id="cleanup.never_use_blocks" value="false"/>
|
||||
<setting id="cleanup.organize_imports" value="true"/>
|
||||
<setting id="cleanup.switch" value="false"/>
|
||||
<setting id="cleanup.stringbuilder_for_local_vars" value="false"/>
|
||||
<setting id="cleanup.make_parameters_final" value="false"/>
|
||||
<setting id="cleanup.ternary_operator" value="false"/>
|
||||
<setting id="cleanup.controlflow_merge" value="false"/>
|
||||
<setting id="cleanup.unreachable_block" value="false"/>
|
||||
<setting id="cleanup.always_use_blocks" value="true"/>
|
||||
<setting id="cleanup.add_serial_version_id" value="false"/>
|
||||
<setting id="cleanup.stringconcat_to_textblock" value="false"/>
|
||||
<setting id="cleanup.invert_equals" value="false"/>
|
||||
<setting id="cleanup.use_string_is_blank" value="false"/>
|
||||
<setting id="cleanup.remove_unused_local_variables" value="false"/>
|
||||
<setting id="cleanup.remove_redundant_modifiers" value="false"/>
|
||||
<setting id="cleanup.system_property_file_encoding" value="false"/>
|
||||
<setting id="cleanup.sort_members_all" value="false"/>
|
||||
<setting id="cleanup.double_negation" value="false"/>
|
||||
<setting id="cleanup.format_source_code_changes_only" value="false"/>
|
||||
<setting id="cleanup.arrays_fill" value="false"/>
|
||||
<setting id="cleanup.add_generated_serial_version_id" value="false"/>
|
||||
<setting id="cleanup.plain_replacement" value="false"/>
|
||||
<setting id="cleanup.precompile_regex" value="false"/>
|
||||
<setting id="cleanup.useless_return" value="false"/>
|
||||
<setting id="cleanup.simplify_lambda_expression_and_method_ref" value="false"/>
|
||||
<setting id="cleanup.unlooped_while" value="false"/>
|
||||
<setting id="cleanup.make_local_variable_final" value="false"/>
|
||||
<setting id="cleanup.pull_up_assignment" value="false"/>
|
||||
<setting id="cleanup.overridden_assignment" value="false"/>
|
||||
<setting id="cleanup.else_if" value="false"/>
|
||||
<setting id="cleanup.reduce_indentation" value="false"/>
|
||||
<setting id="cleanup.use_this_for_non_static_method_access" value="false"/>
|
||||
<setting id="cleanup.use_this_for_non_static_field_access" value="false"/>
|
||||
<setting id="cleanup.use_this_for_non_static_field_access_only_if_necessary" value="true"/>
|
||||
<setting id="cleanup.hash" value="false"/>
|
||||
<setting id="cleanup.boolean_literal" value="false"/>
|
||||
<setting id="cleanup.add_default_serial_version_id" value="true"/>
|
||||
<setting id="cleanup.add_missing_methods" value="false"/>
|
||||
<setting id="cleanup.primitive_comparison" value="false"/>
|
||||
<setting id="cleanup.one_if_rather_than_duplicate_blocks_that_fall_through" value="false"/>
|
||||
</profile>
|
||||
</profiles>
|
Before Width: | Height: | Size: 488 B After Width: | Height: | Size: 450 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 886 B |
@ -24,4 +24,4 @@ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
--------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------
|
||||
|
@ -19,4 +19,4 @@
|
||||
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||
*/
|
||||
*/
|
||||
|
BIN
desktopRuntime/libEGL.so.1
Normal file
BIN
desktopRuntime/libGLESv2.so
Normal file
@ -18,4 +18,4 @@ 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.
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
@ -4,4 +4,4 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
|
||||
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.
|
||||
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.
|
||||
|
@ -1 +1 @@
|
||||
0.3.0
|
||||
0.4.0
|
||||
|
41
desktopRuntime/resources/ES6ShimScript.txt
Normal file
@ -0,0 +1,41 @@
|
||||
(function(_jsGlobal){try {(function(){var namedFunction=function(name,body){if(typeof body==="function"){try {Object.defineProperty(body,"name",{configurable:true,enumerable:false,writable:false,value:name});}catch(ex){}}return body;};var enabledShims=[];var collectionsShimImpl=function(){var i;var createCollection=function(proto,objectOnly){var Collection=namedFunction("Collection",function(a){if(!this||this.constructor!==Collection)return new Collection(a);Object.defineProperty(this,
|
||||
"_keys",{value:[]});Object.defineProperty(this,"_values",{value:[]});Object.defineProperty(this,"_itp",{value:[]});Object.defineProperty(this,"objectOnly",{value:objectOnly});if(a)init.call(this,a);});if(!objectOnly){Object.defineProperty(proto,"size",{get:sharedSize});}proto.constructor=Collection;for(var k in proto){Object.defineProperty(Collection.prototype,k,{value:proto[k]});}return Collection;};var init=function(a){if(this.add)a.forEach(this.add,this);else a.forEach(function(a){this.set(a[0],a[1]);},this);};var sharedDelete
|
||||
=function(key){if(this.has(key)){this._keys.splice(i,1);this._values.splice(i,1);this._itp.forEach(function(p){if(i<p[0])p[0]--;});}return -1<i;};var sharedGet=namedFunction("get",function(key){return this.has(key)?this._values[i]:$rt_globals.undefined;});var has=namedFunction("has",function(list,key){if(this.objectOnly&&key!==Object(key))throw new $rt_globals.TypeError("Invalid value used as weak collection key");if(key!=key||key===0)for(i=list.length;i--&&!$rt_globals.is(list[i],key);){}else i=list.indexOf(key);return -1
|
||||
<i;});var setHas=namedFunction("has",function(value){return has.call(this,this._values,value);});var mapHas=namedFunction("has",function(value){return has.call(this,this._keys,value);});var sharedSet=namedFunction("set",function(key,value){this.has(key)?(this._values[i]=value):(this._values[this._keys.push(key) -1]=value);return this;});var sharedAdd=namedFunction("add",function(value){if(!this.has(value))this._values.push(value);return this;});var sharedClear=namedFunction("clear",function(){(this._keys||0).length
|
||||
=this._values.length=0;});var sharedKeys=namedFunction("keys",function(){return sharedIterator(this._itp,this._keys);});var sharedValues=namedFunction("values",function(){return sharedIterator(this._itp,this._values);});var mapEntries=namedFunction("entries",function(){return sharedIterator(this._itp,this._keys,this._values);});var setEntries=namedFunction("entries",function(){return sharedIterator(this._itp,this._values,this._values);});var sharedIterator=function(itp,array,array2){var p=[0],done=false;itp.push(p);return {
|
||||
next:function(){var v,k=p[0];if(!done&&k<array.length){v=array2?[array[k],array2[k]]:array[k];p[0]++;}else {done=true;itp.splice(itp.indexOf(p),1);}return {done:done,value:v};}};};var sharedSize=namedFunction("size",function(){return this._values.length;});var sharedForEach=namedFunction("forEach",function(callback,context){var it=this.entries();for(;;){var r=it.next();if(r.done)break;callback.call(context,r.value[1],r.value[0],this);}});return {createCollection:createCollection,init:init,sharedDelete:sharedDelete,
|
||||
sharedGet:sharedGet,has:has,setHas:setHas,mapHas:mapHas,sharedSet:sharedSet,sharedAdd:sharedAdd,sharedClear:sharedClear,sharedKeys:sharedKeys,sharedValues:sharedValues,mapEntries:mapEntries,setEntries:setEntries,sharedIterator:sharedIterator,sharedSize:sharedSize,sharedForEach:sharedForEach};}();var shim_Map=function(){if(typeof $rt_globals.Map==="undefined"||typeof (new $rt_globals.Map()).values!=="function"||!((new $rt_globals.Map()).values()).next){Object.defineProperty(_jsGlobal,"Map",{value:namedFunction("Map",
|
||||
collectionsShimImpl.createCollection({'delete':collectionsShimImpl.sharedDelete,has:collectionsShimImpl.mapHas,get:collectionsShimImpl.sharedGet,set:collectionsShimImpl.sharedSet,keys:collectionsShimImpl.sharedKeys,values:collectionsShimImpl.sharedValues,entries:collectionsShimImpl.mapEntries,forEach:collectionsShimImpl.sharedForEach,clear:collectionsShimImpl.sharedClear}))});return true;}else {return false;}};var shim_WeakMap=function(){if(typeof $rt_globals.WeakMap==="undefined"){Object.defineProperty(_jsGlobal,
|
||||
"WeakMap",{value:namedFunction("WeakMap",collectionsShimImpl.createCollection({'delete':collectionsShimImpl.sharedDelete,clear:collectionsShimImpl.sharedClear,get:collectionsShimImpl.sharedGet,has:collectionsShimImpl.mapHas,set:collectionsShimImpl.sharedSet}))});return true;}else {return false;}};var shim_Set=function(){if(typeof $rt_globals.Set==="undefined"||typeof (new $rt_globals.Set()).values!=="function"||!((new $rt_globals.Set()).values()).next){Object.defineProperty(_jsGlobal,"Set",{value:namedFunction("Set",
|
||||
collectionsShimImpl.createCollection({has:collectionsShimImpl.setHas,add:collectionsShimImpl.sharedAdd,'delete':collectionsShimImpl.sharedDelete,clear:collectionsShimImpl.sharedClear,keys:collectionsShimImpl.sharedValues,values:collectionsShimImpl.sharedValues,entries:collectionsShimImpl.setEntries,forEach:collectionsShimImpl.sharedForEach}))});return true;}else {return false;}};var shim_WeakSet=function(){if(typeof $rt_globals.WeakSet==="undefined"){Object.defineProperty(_jsGlobal,"WeakSet",{value:namedFunction("WeakSet",
|
||||
collectionsShimImpl.createCollection({'delete':collectionsShimImpl.sharedDelete,add:collectionsShimImpl.sharedAdd,clear:collectionsShimImpl.sharedClear,has:collectionsShimImpl.setHas}))});return true;}else {return false;}};var createPromiseShim=function(){var PROMISE_ID="[["+(($rt_globals.Math.random()).toString(36)).substring(2)+"]]";var PENDING=void 0;var FULFILLED=1;var REJECTED=2;var _qlen=0;var msgChannel=null;var useLegacyFlush=false;var isFlushTest=false;var queue=new $rt_globals.Array(1000);var _noop
|
||||
=function(){};var _initMessageChannelFlush=function(flushFunc){if(typeof $rt_globals.MessageChannel==="undefined"){useLegacyFlush=true;$rt_globals.setTimeout(flushFunc,0);return;}isFlushTest=true;try {msgChannel=new $rt_globals.MessageChannel();var testVal=false;var _flushTest=function(){testVal=true;};msgChannel.port1.addEventListener("message",_flushTest);msgChannel.port1.start();msgChannel.port2.start();msgChannel.port2.postMessage("");if(testVal){msgChannel=null;useLegacyFlush=true;isFlushTest=false;$rt_globals.setTimeout(flushFunc,
|
||||
0);return;}$rt_globals.setTimeout(function(){msgChannel.port1.removeEventListener("message",_flushTest);if(!testVal){msgChannel=null;useLegacyFlush=true;}else {msgChannel.port1.addEventListener("message",flushFunc);}isFlushTest=false;flushFunc();},10);}catch(ex){msgChannel=null;useLegacyFlush=true;isFlushTest=false;$rt_globals.setTimeout(flushFunc,0);return;}};var _scheduleFlush=function(){if(useLegacyFlush||isFlushTest){$rt_globals.setTimeout(_flush,0);}else {if(msgChannel===null){_initMessageChannelFlush(_flush);return;}msgChannel.port2.postMessage("");}};var _flush
|
||||
=function(){for(var i=0;i<_qlen;i+=2){var callback=queue[i];var arg=queue[i+1];callback(arg);queue[i]=$rt_globals.undefined;queue[i+1]=$rt_globals.undefined;}_qlen=0;};var _asap=function(callback,arg){queue[_qlen]=callback;queue[_qlen+1]=arg;_qlen+=2;if(_qlen===2){_scheduleFlush();}};var _handleForeignThenable=function(promise,thenable,then$$1){_asap(function(promise){var sealed=false;var error=_tryThen(then$$1,thenable,function(value){if(sealed){return;}sealed=true;if(thenable!==value){__resolve(promise,value);}
|
||||
else {_fulfill(promise,value);}},function(reason){if(sealed){return;}sealed=true;_reject(promise,reason);},"Settle: "+(promise._label||" unknown promise"));if(!sealed&&error){sealed=true;_reject(promise,error);}},promise);};var _tryThen=function(then$$1,value,fulfillmentHandler,rejectionHandler){try {then$$1.call(value,fulfillmentHandler,rejectionHandler);}catch(e){return e;}};var _handleOwnThenable=function(promise,thenable){if(thenable._state===FULFILLED){_fulfill(promise,thenable._result);}else if(thenable._state
|
||||
===REJECTED){_reject(promise,thenable._result);}else {_subscribe(thenable,$rt_globals.undefined,function(value){return __resolve(promise,value);},function(reason){return _reject(promise,reason);});}};var _handleMaybeThenable=function(promise,maybeThenable,then$$1){if(maybeThenable.constructor===promise.constructor&&then$$1===_then&&maybeThenable.constructor.resolve===_resolve){_handleOwnThenable(promise,maybeThenable);}else {if(then$$1===$rt_globals.undefined){_fulfill(promise,maybeThenable);}else if(typeof then$$1
|
||||
==="function"){_handleForeignThenable(promise,maybeThenable,then$$1);}else {_fulfill(promise,maybeThenable);}}};var __resolve=function(promise,value){if(promise===value){_reject(promise,new $rt_globals.TypeError("You cannot resolve a promise with itself"));}else if(typeof value==="object"||typeof value==="function"){var then$$1=void 0;try {then$$1=value.then;}catch(error){_reject(promise,error);return;}_handleMaybeThenable(promise,value,then$$1);}else {_fulfill(promise,value);}};var _reject=function(promise,
|
||||
reason){if(promise._state!==PENDING){return;}promise._state=REJECTED;promise._result=reason;_asap(_publishRejection,promise);};var _subscribe=function(parent,child,onFulfillment,onRejection){var _subscribers=parent._subscribers;var length=_subscribers.length;parent._onerror=null;_subscribers[length]=child;_subscribers[length+FULFILLED]=onFulfillment;_subscribers[length+REJECTED]=onRejection;if(length===0&&parent._state){_asap(_publish,parent);}};var _publish=function(promise){var subscribers=promise._subscribers;var settled
|
||||
=promise._state;if(subscribers.length===0){return;}var child=void 0,callback=void 0,detail=promise._result;for(var i=0;i<subscribers.length;i+=3){child=subscribers[i];callback=subscribers[i+settled];if(child){_invokeCallback(settled,child,callback,detail);}else {callback(detail);}}promise._subscribers.length=0;};var _publishRejection=function(promise){if(promise._onerror){promise._onerror(promise._result);}_publish(promise);};var _fulfill=function(promise,value){if(promise._state!==PENDING){return;}promise._result
|
||||
=value;promise._state=FULFILLED;if(promise._subscribers.length!==0){_asap(_publish,promise);}};var _invokeCallback=function(settled,promise,callback,detail){var hasCallback=typeof callback==="function",value=void 0,error=void 0,succeeded=true;if(hasCallback){try {value=callback(detail);}catch(e){succeeded=false;error=e;}if(promise===value){_reject(promise,new $rt_globals.TypeError("A promises callback cannot return that same promise."));return;}}else {value=detail;}if(promise._state!==PENDING){}else if(hasCallback
|
||||
&&succeeded){__resolve(promise,value);}else if(succeeded===false){_reject(promise,error);}else if(settled===FULFILLED){_fulfill(promise,value);}else if(settled===REJECTED){_reject(promise,value);}};var _initializePromise=function(promise,resolver){try {resolver(function(value){__resolve(promise,value);},function(reason){_reject(promise,reason);});}catch(e){_reject(promise,e);}};var id=0;var _nextId=function(){return id++;};var _makePromise=function(promise){promise[PROMISE_ID]=id++;promise._state=$rt_globals.undefined;promise._result
|
||||
=$rt_globals.undefined;promise._subscribers=[];};var Promise;Promise=namedFunction("Promise",function(resolver){this[PROMISE_ID]=_nextId();this._result=this._state=$rt_globals.undefined;this._subscribers=[];if(_noop!==resolver){typeof resolver!=='function'&&$rt_globals._needsResolver();this instanceof Promise?_initializePromise(this,resolver):$rt_globals._needsNew();}});var _then=namedFunction("then",function(onFulfillment,onRejection){var parent=this;var child=new this.constructor(_noop);if(child[PROMISE_ID]
|
||||
===$rt_globals.undefined){_makePromise(child);}var _state=parent._state;if(_state){var callback=arguments[_state -1];_asap(function(){return _invokeCallback(_state,child,callback,parent._result);});}else {_subscribe(parent,child,onFulfillment,onRejection);}return child;});Promise.prototype.then=_then;Promise.prototype.catch=namedFunction("catch",function(onRejection){return this.then(null,onRejection);});Promise.prototype.finally=namedFunction("finally",function(callback){var promise=this;var constructor=promise.constructor;if
|
||||
(typeof callback==="function"){return promise.then(function(value){return (constructor.resolve(callback())).then(function(){return value;});},function(reason){return (constructor.resolve(callback())).then(function(){throw reason;});});}return promise.then(callback,callback);});Promise.all=namedFunction("all",function(entries){throw new $rt_globals.Error("Promise.all is not included in the ES6 compatibility shim!");});Promise.race=namedFunction("race",function(entries){var Constructor=this;if(!$rt_globals.Array.isArray(entries))
|
||||
{return new Constructor(function(_,reject){return reject(new $rt_globals.TypeError("You must pass an array to race."));});}else {return new Constructor(function(resolve,reject){var length=entries.length;for(var i=0;i<length;i++){(Constructor.resolve(entries[i])).then(resolve,reject);}});}});var _resolve=namedFunction("resolve",function(object){var Constructor=this;if(object&&typeof object==="object"&&object.constructor===Constructor){return object;}var promise=new Constructor(_noop);__resolve(promise,object);return promise;});Promise.resolve
|
||||
=_resolve;Promise.reject=namedFunction("reject",function(reason){var Constructor=this;var promise=new Constructor(_noop);_reject(promise,reason);return promise;});return Promise;};var shim_Promise=function(){if(typeof Promise==="undefined"){Object.defineProperty(_jsGlobal,"Promise",{value:createPromiseShim()});return true;}else {return false;}};var shim_String_fromCodePoint=function(){if(typeof $rt_globals.String.fromCodePoint==="undefined"){Object.defineProperty($rt_globals.String,"fromCodePoint",{value:namedFunction("fromCodePoint",
|
||||
function(codePoints){var result=[];var next;for(var i=0,length=arguments.length;i<length;i++){next=$rt_globals.Number(arguments[i]);if(next!==(next|0)||next<0||next>0x10FFFF){throw new $rt_globals.RangeError("Invalid code point "+next);}if(next<0x10000){result.push($rt_globals.String.fromCharCode(next));}else {next -=0x10000;result.push($rt_globals.String.fromCharCode((next>>10)+0xD800));result.push($rt_globals.String.fromCharCode(next%0x400+0xDC00));}}return result.join("");})});return true;}else {return false;}};var shim_String_proto_codePointAt
|
||||
=function(){if(typeof $rt_globals.String.prototype.codePointAt==="undefined"){Object.defineProperty($rt_globals.String.prototype,"codePointAt",{value:namedFunction("codePointAt",function(pos){pos=pos|0;var leng=this.length;if(pos>=0&&pos<leng){var first=this.charCodeAt(pos);var isEnd=pos+1===leng;if(first<0xD800||first>0xDBFF||isEnd){return first;}var second=this.charCodeAt(pos+1);if(second<0xDC00||second>0xDFFF){return first;}return (first -0xD800)*1024+second -0xDC00+0x10000;}})});return true;}else {return false;}};var shim_String_proto_startsWith
|
||||
=function(){if(typeof $rt_globals.String.prototype.startsWith==="undefined"){Object.defineProperty($rt_globals.String.prototype,"startsWith",{value:namedFunction("startsWith",function(str){var position=0;if(arguments.length>1){position=arguments[1];}var start=$rt_globals.Math.max(position,0)|0;return this.slice(start,start+str.length)===str;})});return true;}else {return false;}};var shim_String_proto_endsWith=function(){if(typeof $rt_globals.String.prototype.endsWith==="undefined"){Object.defineProperty($rt_globals.String.prototype,
|
||||
"endsWith",{value:namedFunction("endsWith",function(str){var len=this.length;var endPosition;if(arguments.length>1){endPosition=arguments[1];}var pos=typeof endPosition==="undefined"?len:endPosition|0;var end=$rt_globals.Math.min($rt_globals.Math.max(pos,0)|0,len);return this.slice(end -str.length,end)===str;})});return true;}else {return false;}};var shim_String_proto_includes=function(){if(typeof $rt_globals.String.prototype.includes==="undefined"){Object.defineProperty($rt_globals.String.prototype,"includes",
|
||||
{value:namedFunction("includes",function(str){var position;if(arguments.length>1){position=arguments[1];}return this.indexOf(str,position)!== -1;})});return true;}else {return false;}};var stringRepeatHelper;stringRepeatHelper=function(s,times){if(times<1){return '';}if(times%2){return stringRepeatHelper(s,times -1)+s;}var half=stringRepeatHelper(s,times/2);return half+half;};var shim_String_proto_repeat=function(){if(typeof $rt_globals.String.prototype.repeat==="undefined"){Object.defineProperty($rt_globals.String.prototype,
|
||||
"repeat",{value:namedFunction("repeat",function(numTimes){if(numTimes>=$rt_globals.Infinity||(numTimes|=0)<0){throw new $rt_globals.RangeError("repeat count must be less than infinity and not overflow maximum string size");}return stringRepeatHelper(this,numTimes);})});return true;}else {return false;}};var shim_Object_is=function(){if(typeof Object.is==="undefined"){Object.defineProperty(Object,"is",{value:namedFunction("is",function(a,b){return a===b||a!==a&&b!==b;})});return true;}else {return false;}};var shim_Object_setPrototypeOf
|
||||
=function(){if(typeof Object.setPrototypeOf==="undefined"){var theShim=function(Object,magic){var set;var checkArgs=function(O,proto){if(typeof O!=="object"||O===null){throw new $rt_globals.TypeError("can not set prototype on a non-object");}if(typeof proto!=="object"&&proto!==null){throw new $rt_globals.TypeError("can only set prototype to an object or null");}};var setPrototypeOf=function(O,proto){checkArgs(O,proto);set.call(O,proto);return O;};try {set=(Object.getOwnPropertyDescriptor(Object.prototype,magic)).set;set.call({
|
||||
},null);}catch(o_O){if(Object.prototype!=={}[magic]||{__proto__:null}.__proto__===void 0){$rt_globals.console.error("ES6Shims: Can not shim Object.setPrototypeOf on this browser! Ignoring for now");return false;}set=function(proto){this[magic]=proto;};}return setPrototypeOf;}(Object,"__proto__");if(theShim){Object.defineProperty(Object,"setPrototypeOf",{value:namedFunction("setPrototypeOf",theShim)});return true;}else {return false;}}else {return false;}};var shim_Function_proto_name=function(){if($rt_globals.Math.max.name
|
||||
!=="max"){Object.defineProperty($rt_globals.Function.prototype,"name",{configurable:true,enumerable:false,get:function(){if(this===$rt_globals.Function.prototype){return "";}var str=$rt_globals.Function.prototype.toString.call(this);var match=str.match(/\s*function\s+([^(\s]*)\s*/);var name=match&&match[1];Object.defineProperty(this,"name",{configurable:true,enumerable:false,writable:false,value:name});return name;}});return true;}else {return false;}};var shim_Math_sign=function(){if(typeof $rt_globals.Math.sign
|
||||
==="undefined"){Object.defineProperty($rt_globals.Math,"sign",{value:namedFunction("sign",function(val){var number=$rt_globals.Number(val);if(number===0){return number;}if($rt_globals.isNaN(number)){return number;}return number<0? -1:1;})});return true;}else {return false;}};var shim_Symbol=function(){if(typeof $rt_globals.Symbol==="undefined"){Object.defineProperty(_jsGlobal,"Symbol",{value:function(){var symRet=namedFunction("Symbol",function(){return "[[ShimbolR_"+(($rt_globals.Math.random()).toString(36)).substring(2)
|
||||
+"]]";});symRet.for=namedFunction("for",function(symName){if(!(typeof symName==="string"))return $rt_globals.undefined;return "[[ShimbolN_"+symName+"]]";});symRet.keyFor=namedFunction("keyFor",function(sym){return typeof sym==="string"&&sym.startsWith("[[ShimbolN_")&&sym.endsWith("]]")?sym.substring(11,sym.length -2):$rt_globals.undefined;});return symRet;}()});return true;}else {return false;}};var hasErrors=false;var shim_install=function(str,cb){try {return cb();}catch(_exx_){hasErrors=true;$rt_globals.console.error("ES6Shims: Failed to detect and enable shim \""
|
||||
+str+"\" for this browser! (Continuing anyway)");$rt_globals.console.error(_exx_);return false;}};if(shim_install("Map",shim_Map))enabledShims.push(0);if(shim_install("WeakMap",shim_WeakMap))enabledShims.push(1);if(shim_install("Set",shim_Set))enabledShims.push(2);if(shim_install("WeakSet",shim_WeakSet))enabledShims.push(3);if(shim_install("Promise",shim_Promise))enabledShims.push(4);if(shim_install("String_fromCodePoint",shim_String_fromCodePoint))enabledShims.push(5);if(shim_install("String_proto_codePointAt",
|
||||
shim_String_proto_codePointAt))enabledShims.push(6);if(shim_install("String_proto_startsWith",shim_String_proto_startsWith))enabledShims.push(7);if(shim_install("String_proto_endsWith",shim_String_proto_endsWith))enabledShims.push(8);if(shim_install("String_proto_includes",shim_String_proto_includes))enabledShims.push(9);if(shim_install("String_proto_repeat",shim_String_proto_repeat))enabledShims.push(10);if(shim_install("Object_is",shim_Object_is))enabledShims.push(12);if(shim_install("Object_setPrototypeOf",
|
||||
shim_Object_setPrototypeOf))enabledShims.push(13);if(shim_install("Function_proto_name",shim_Function_proto_name))enabledShims.push(14);if(shim_install("Math_sign",shim_Math_sign))enabledShims.push(15);if(shim_install("Symbol",shim_Symbol))enabledShims.push(16);var enCnt=enabledShims.length;_jsGlobal.__eaglercraftXES6ShimStatus={getShimInitStatus:function(){return (enCnt>0?1:0)|(hasErrors?2:0);},getEnabledShimCount:function(){return enCnt;},getEnabledShimID:function(idxIn){return enabledShims[idxIn];}};})();}
|
||||
catch(_ex_){$rt_globals.console.error("ES6Shims: Failed to detect and enable shims for this browser! (Continuing anyway)");$rt_globals.console.error(_ex_);_jsGlobal.__eaglercraftXES6ShimStatus={getShimInitStatus:function(){return -1;},getEnabledShimCount:function(){return 0;},getEnabledShimID:function(idxIn){return $rt_globals.undefined;}};}})($rt_globals);
|
@ -3,14 +3,19 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="description" content="Starlike Client is the ultimate modded Eaglercraft experience, featuring unique blocks, items, mobs, new dimensions, and more. Play now for an unforgettable adventure!" />
|
||||
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.8, starlike, starlike client, modded, modded minecraft, mods" />
|
||||
<meta name="description" content="Starlike Client is the ultimate modded Eaglercraft client, featuring unique blocks, items, and more. Play now!" />
|
||||
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.8, starlike, starlike client, modded, modded minecraft, modded eaglercraft, mods" />
|
||||
<meta property="og:title" content="Starlike Client Offline" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:image" content="https://raw.githubusercontent.com/zumbiepig/Starlike/main/logo.png" />
|
||||
<meta property="og:url" content="https://www.starlikeclient.com/" />
|
||||
<meta property="og:description" content="Starlike Client is the ultimate modded Eaglercraft experience, featuring unique blocks, items, mobs, new dimensions, and more. Play now for an unforgettable adventure!" />
|
||||
<meta property="og:description" content="Starlike Client is the ultimate modded Eaglercraft client, featuring unique blocks, items, and more. Play now!" />
|
||||
<meta property="og:locale" content="en_US" />
|
||||
<!-- JSPI Origin Trial for https://starlike.zumbiepig.dev -->
|
||||
<!-- Google Chrome, expires 04/14/2024 -->
|
||||
<meta http-equiv="origin-trial" content="ApMZZkeOq5anKcCzDkNZWXmBTyMhuJJ+/qW8JPeixa1jh+zJwzTRgeM9/m1r6+3EBXKF6OymNQS9HVs3pvGooQAAAABveyJvcmlnaW4iOiJodHRwczovL3N0YXJsaWtlLnp1bWJpZXBpZy5kZXY6NDQzIiwiZmVhdHVyZSI6IldlYkFzc2VtYmx5SlNQcm9taXNlSW50ZWdyYXRpb24iLCJleHBpcnkiOjE3NDQ2NzUyMDB9">
|
||||
<!-- Microsoft Edge, expires 01/19/2024 -->
|
||||
<meta http-equiv="origin-trial" content="A83x3ruakrC8sGtPDOSx42EQEDyX3ty8IzpJyHWHLXgM7pHHiSVrs5FusADaVEyQaXtlQWX7EsFvupAYz9uN68QAAABveyJvcmlnaW4iOiJodHRwczovL3N0YXJsaWtlLnp1bWJpZXBpZy5kZXY6NDQzIiwiZmVhdHVyZSI6IldlYkFzc2VtYmx5SlNQcm9taXNlSW50ZWdyYXRpb24iLCJleHBpcnkiOjE3MzczMTQzMTR9">
|
||||
<title>Starlike Client Offline</title>
|
||||
<link
|
||||
rel="icon"
|
||||
@ -55,7 +60,7 @@
|
||||
margin: 0;
|
||||
font-family: Inter;
|
||||
font-size: 3.5vh;
|
||||
color: #fff;
|
||||
color: #ffffff;
|
||||
}
|
||||
.header > h3 > span {
|
||||
color: #f5deb3;
|
||||
@ -135,9 +140,10 @@
|
||||
timeoutReference: null,
|
||||
};
|
||||
function playGame() {
|
||||
if (window.location.protocol !== 'file:') {
|
||||
if (!['file:', 'data:', 'blob:'].includes(window.location.protocol)) {
|
||||
alert('This is the offline download, please use the web version for better performance');
|
||||
} else if (document.readyState !== 'complete') {
|
||||
}
|
||||
if (document.readyState !== 'complete') {
|
||||
alert('Please wait for the game to finish loading.');
|
||||
} else {
|
||||
clearTimeout(textData.timeoutReference);
|
||||
@ -145,8 +151,8 @@
|
||||
document.body.innerHTML = '';
|
||||
document.head.querySelector('meta[name="viewport"]').setAttribute('content', 'width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0');
|
||||
document.documentElement.removeAttribute('lang');
|
||||
document.documentElement.setAttribute('style', 'width:100%;height:100%;background-color:black;');
|
||||
document.body.setAttribute('style', 'margin:0px;width:100%;height:100%;overflow:hidden;background-color:black;');
|
||||
document.documentElement.setAttribute('style', 'width:100%;height:100%;background-color:#000000;');
|
||||
document.body.setAttribute('style', 'margin:0px;width:100%;height:100%;overflow:hidden;background-color:#000000;');
|
||||
document.body.setAttribute('id', 'game_frame');
|
||||
window.main();
|
||||
}
|
||||
|
@ -1,24 +0,0 @@
|
||||
"use strict";
|
||||
${classes_js}
|
||||
|
||||
// %%%%%%%%% launch options %%%%%%%%%%%%
|
||||
|
||||
if(typeof window !== "undefined") {
|
||||
window.eaglercraftXClientScriptElement = document.currentScript;
|
||||
if(window.eaglercraftXOptsHints && window.eaglercraftXOptsHints.hintsVersion === 1) {
|
||||
window.eaglercraftXOpts = window.eaglercraftXOptsHints;
|
||||
}else {
|
||||
var relayzId = Math.floor(Math.random() * 3);
|
||||
window.eaglercraftXOpts = {
|
||||
container: "game_frame",
|
||||
enableSignatureBadge: true
|
||||
};
|
||||
}
|
||||
window.addEventListener("load", function() {
|
||||
main();
|
||||
});
|
||||
}
|
||||
|
||||
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
if(typeof window !== "undefined") { window.eaglercraftXOpts.enableSignatureBadge = true; window.eaglercraftXOpts.assetsURI = ${assets_epk}; main(); }
|
@ -1 +1 @@
|
||||
url: https://starlike.orionzleon.me/latest_update.dat
|
||||
url: https://starlike.orionzleon.me/latest_update.dat
|
||||
|
@ -1,88 +1,87 @@
|
||||
<style type="text/css" style="display:none !important;">{% embed eval `boot_menu_style.css` %}</style>
|
||||
<div class="_eaglercraftX_boot_menu {% global `root_class_gen` %}">
|
||||
<div class="_eaglercraftX_boot_menu_inner">
|
||||
<div class="_eaglercraftX_boot_menu_header">
|
||||
<p class="_eaglercraftX_boot_menu_header_title">EaglercraftX 1.8 Boot Manager</p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_content">
|
||||
<div class="_eaglercraftX_boot_menu_content_inner">
|
||||
<div class="_eaglercraftX_boot_menu_content_view_selection" style="display:none;">
|
||||
<div class="_eaglercraftX_boot_menu_content_selection"></div>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_content_view_editor" style="display:none;">
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf">
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_inner">
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item_wide" style="padding: 20px;">
|
||||
<p>Profile Name: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_profile_name"></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item_wide">
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_data_format">
|
||||
<p>Data Format: <span class="_eaglercraftX_boot_menu_launch_conf_val_data_format">Standard Offline</span></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_launch_type">
|
||||
<p>Launch Type:
|
||||
<select class="_eaglercraftX_boot_menu_launch_conf_val_launch_type">
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="EAGLERX_SIGNED_V1">EaglercraftX Signed Client</option>
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="EAGLERX_V1">EaglercraftX Standard Offline</option>
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="EAGLER_1_5_V2">Eaglercraft 1.5 (post-22w34a)</option>
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="EAGLER_1_5_V1">Eaglercraft 1.5 (pre-22w34a)</option>
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="EAGLER_BETA_V1">Eaglercraft Beta 1.3</option>
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="PEYTON_V1">PeytonPlayz585 Indev</option>
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="PEYTON_V2">PeytonPlayz585 Alpha/Beta</option>
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="STANDARD_OFFLINE_V1">Standard Offline</option>
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="IFRAME_SANDBOX_V1">IFrame HTML File</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_join_server" style="display:none;">
|
||||
<p>Join Server: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_join_server"></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_opts_name" style="display:none;">
|
||||
<p>Opt Variable Name: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_opts_name"></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_assetsURI" style="display:none;">
|
||||
<p>Assets URI Opt: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_assetsURI"></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_container" style="display:none;">
|
||||
<p>Container ID Opt: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_container"></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_main_func" style="display:none;">
|
||||
<p>Main function: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_main_func"></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_clear_cookies">
|
||||
<p>Clear Cookies Before Launch: <input type="checkbox" class="_eaglercraftX_boot_menu_launch_conf_val_clear_cookies"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<textarea class="_eaglercraftX_boot_menu_launch_opt_editor" spellcheck="false"></textarea>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_popup" style="display:none;">
|
||||
<div class="_eaglercraftX_boot_menu_popup_inner">
|
||||
<div class="_eaglercraftX_boot_menu_popup_view_confirm" style="display:none;">
|
||||
<p class="_eaglercraftX_boot_menu_popup_confirm_title"></p>
|
||||
<p class="_eaglercraftX_boot_menu_popup_confirm_opts"></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_popup_view_selection" style="display:none;">
|
||||
<p class="_eaglercraftX_boot_menu_popup_selection_title"></p>
|
||||
<div class="_eaglercraftX_boot_menu_popup_selection"></div>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_popup_view_input" style="display:none;">
|
||||
<p class="_eaglercraftX_boot_menu_popup_input_title"></p>
|
||||
<p class="_eaglercraftX_boot_menu_popup_input_val_container"><input class="_eaglercraftX_boot_menu_popup_input_val" type="text"></p>
|
||||
<p class="_eaglercraftX_boot_menu_popup_input_opts"><span class="_eaglercraftX_boot_menu_popup_input_opt _eaglercraftX_boot_menu_popup_input_opt_cancel"> < Cancel > </span>   <span class="_eaglercraftX_boot_menu_popup_input_opt _eaglercraftX_boot_menu_popup_input_opt_done _eaglercraftX_boot_menu_popup_input_opt_selected"> < Done > </span></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_footer">
|
||||
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_boot_select" style="display:none;">Use the ↑ and ↓ keys to select which entry is highlighted.<br>Press enter to boot the selected client, `e' to edit eaglercraft opts before booting, or ESC to exit and boot normally.</p>
|
||||
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_boot_select_count" style="display:none;">Use the ↑ and ↓ keys to select which entry is highlighted.<br>Press enter to boot the selected client, `e' to edit eaglercraft opts before booting.<br>The first option will be executed in <span class="_eaglercraftX_boot_menu_footer_text_boot_countdown">0</span> seconds. Press any key to cancel.</p>
|
||||
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_menu_select" style="display:none;">Use the ↑ and ↓ keys to select which entry is highlighted.<br>Press enter to select, or ESC return to the previous screen.</p>
|
||||
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_opts_editor" style="display:none;">Press CTRL+SHIFT to open editor menu.<br>Press CTRL+ENTER to boot, or ESC return to the previous menu.</p>
|
||||
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_opts_editor_alt" style="display:none;">Press CTRL+SHIFT to open editor menu.<br>Press CTRL+ENTER to save, or ESC return to the previous menu.</p>
|
||||
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_boot_order" style="display:none;">Use the ↑ and ↓ keys to select which entry is highlighted.<br>Press CTRL+↑ and CTRL+↓ to adjust item order, or ESC to cancel.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<style type="text/css" style="display:none !important;">{% embed eval `boot_menu_style.css` %}</style>
|
||||
<div class="_eaglercraftX_boot_menu {% global `root_class_gen` %}">
|
||||
<div class="_eaglercraftX_boot_menu_inner">
|
||||
<div class="_eaglercraftX_boot_menu_header">
|
||||
<p class="_eaglercraftX_boot_menu_header_title">EaglercraftX 1.8 Boot Manager</p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_content">
|
||||
<div class="_eaglercraftX_boot_menu_content_inner">
|
||||
<div class="_eaglercraftX_boot_menu_content_view_selection" style="display:none;">
|
||||
<div class="_eaglercraftX_boot_menu_content_selection"></div>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_content_view_editor" style="display:none;">
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf">
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_inner">
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item_wide" style="padding: 20px;">
|
||||
<p>Profile Name: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_profile_name"></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item_wide">
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_data_format">
|
||||
<p>Data Format: <span class="_eaglercraftX_boot_menu_launch_conf_val_data_format">Standard Offline</span></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_launch_type">
|
||||
<p>Launch Type:
|
||||
<select class="_eaglercraftX_boot_menu_launch_conf_val_launch_type">
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="EAGLERX_SIGNED_V1">EaglercraftX Signed Client</option>
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="EAGLERX_V1">EaglercraftX Standard Offline</option>
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="EAGLER_1_5_V2">Eaglercraft 1.5 (post-22w34a)</option>
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="EAGLER_1_5_V1">Eaglercraft 1.5 (pre-22w34a)</option>
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="EAGLER_BETA_V1">Eaglercraft Beta 1.3</option>
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="PEYTON_V1">PeytonPlayz585 Indev</option>
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="PEYTON_V2">PeytonPlayz585 Alpha/Beta</option>
|
||||
<option class="_eaglercraftX_boot_menu_launch_conf_val_launch_type_opt" value="STANDARD_OFFLINE_V1">Standard Offline</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_join_server" style="display:none;">
|
||||
<p>Join Server: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_join_server"></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_opts_name" style="display:none;">
|
||||
<p>Opt Variable Name: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_opts_name"></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_assetsURI" style="display:none;">
|
||||
<p>Assets URI Opt: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_assetsURI"></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_container" style="display:none;">
|
||||
<p>Container ID Opt: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_container"></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_main_func" style="display:none;">
|
||||
<p>Main function: <input type="text" class="_eaglercraftX_boot_menu_launch_conf_val_main_func"></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_launch_conf_item _eaglercraftX_boot_menu_launch_conf_clear_cookies">
|
||||
<p>Clear Cookies Before Launch: <input type="checkbox" class="_eaglercraftX_boot_menu_launch_conf_val_clear_cookies"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<textarea class="_eaglercraftX_boot_menu_launch_opt_editor" spellcheck="false"></textarea>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_popup" style="display:none;">
|
||||
<div class="_eaglercraftX_boot_menu_popup_inner">
|
||||
<div class="_eaglercraftX_boot_menu_popup_view_confirm" style="display:none;">
|
||||
<p class="_eaglercraftX_boot_menu_popup_confirm_title"></p>
|
||||
<p class="_eaglercraftX_boot_menu_popup_confirm_opts"></p>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_popup_view_selection" style="display:none;">
|
||||
<p class="_eaglercraftX_boot_menu_popup_selection_title"></p>
|
||||
<div class="_eaglercraftX_boot_menu_popup_selection"></div>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_popup_view_input" style="display:none;">
|
||||
<p class="_eaglercraftX_boot_menu_popup_input_title"></p>
|
||||
<p class="_eaglercraftX_boot_menu_popup_input_val_container"><input class="_eaglercraftX_boot_menu_popup_input_val" type="text"></p>
|
||||
<p class="_eaglercraftX_boot_menu_popup_input_opts"><span class="_eaglercraftX_boot_menu_popup_input_opt _eaglercraftX_boot_menu_popup_input_opt_cancel"> < Cancel > </span>   <span class="_eaglercraftX_boot_menu_popup_input_opt _eaglercraftX_boot_menu_popup_input_opt_done _eaglercraftX_boot_menu_popup_input_opt_selected"> < Done > </span></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="_eaglercraftX_boot_menu_footer">
|
||||
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_boot_select" style="display:none;">Use the ↑ and ↓ keys to select which entry is highlighted.<br>Press enter to boot the selected client, `e' to edit eaglercraft opts before booting, or ESC to exit and boot normally.</p>
|
||||
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_boot_select_count" style="display:none;">Use the ↑ and ↓ keys to select which entry is highlighted.<br>Press enter to boot the selected client, `e' to edit eaglercraft opts before booting.<br>The first option will be executed in <span class="_eaglercraftX_boot_menu_footer_text_boot_countdown">0</span> seconds. Press any key to cancel.</p>
|
||||
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_menu_select" style="display:none;">Use the ↑ and ↓ keys to select which entry is highlighted.<br>Press enter to select, or ESC return to the previous screen.</p>
|
||||
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_opts_editor" style="display:none;">Press CTRL+SHIFT to open editor menu.<br>Press CTRL+ENTER to boot, or ESC return to the previous menu.</p>
|
||||
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_opts_editor_alt" style="display:none;">Press CTRL+SHIFT to open editor menu.<br>Press CTRL+ENTER to save, or ESC return to the previous menu.</p>
|
||||
<p class="_eaglercraftX_boot_menu_footer_text _eaglercraftX_boot_menu_footer_text_boot_order" style="display:none;">Use the ↑ and ↓ keys to select which entry is highlighted.<br>Press CTRL+↑ and CTRL+↓ to adjust item order, or ESC to cancel.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,328 +1,328 @@
|
||||
@font-face {
|
||||
font-family: "{% global `root_class_gen` %}_font0";
|
||||
src: url("data:font/woff;base64,{% embed base64 `web_cl_eagleiii_8x16.woff` %}") format("woff");
|
||||
}
|
||||
.{% global `root_class_gen` %} {
|
||||
font: 24px "{% global `root_class_gen` %}_font0";
|
||||
color: #CCCCCC;
|
||||
background-color: #000000;
|
||||
user-select: none;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.{% global `root_class_gen` %}::-moz-selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %}::selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %}::-webkit-scrollbar {
|
||||
width: 12px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ::-webkit-scrollbar {
|
||||
width: 12px;
|
||||
}
|
||||
.{% global `root_class_gen` %}::-webkit-scrollbar-track, .{% global `root_class_gen` %} ::-webkit-scrollbar-track {
|
||||
background-color: #000000;
|
||||
}
|
||||
.{% global `root_class_gen` %}::-webkit-scrollbar-thumb, .{% global `root_class_gen` %} ::-webkit-scrollbar-thumb {
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %}::-webkit-scrollbar-button, .{% global `root_class_gen` %} ::-webkit-scrollbar-button {
|
||||
display: none;
|
||||
}
|
||||
.{% global `root_class_gen` %}::-webkit-scrollbar-corner, .{% global `root_class_gen` %} ::-webkit-scrollbar-corner {
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_inner {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
min-height: 480px;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
}
|
||||
.{% global `root_class_gen` %} p {
|
||||
margin-block-start: 0px;
|
||||
margin-block-end: 0px;
|
||||
-webkit-margin-before:0px;
|
||||
-webkit-margin-after:0px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_header {
|
||||
flex: 0 1 auto;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_header_title {
|
||||
text-align: center;
|
||||
padding: 32px 0px 0px 0px;
|
||||
color: #CCCCCC;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content {
|
||||
flex: 1 1 auto;
|
||||
position: relative;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_inner {
|
||||
position: absolute;
|
||||
top: 32px;
|
||||
left: 32px;
|
||||
bottom: 32px;
|
||||
right: 32px;
|
||||
border: 2px solid white;
|
||||
z-index: 1;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup {
|
||||
position: absolute;
|
||||
top: 128px;
|
||||
left: 64px;
|
||||
bottom: 64px;
|
||||
right: 64px;
|
||||
z-index: 10;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_inner {
|
||||
width: 50%;
|
||||
min-width: min(calc(100% - 20px), 400px);
|
||||
max-width: 800px;
|
||||
max-height: calc(100% - 20px);
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
border: 2px solid white;
|
||||
background-color: #000000;
|
||||
padding: 10px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_title {
|
||||
text-align: center;
|
||||
padding: 16px;
|
||||
color: #CCCCCC;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opts {
|
||||
text-align: center;
|
||||
padding: 16px;
|
||||
color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opt {
|
||||
cursor: pointer;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opt_selected {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opt_disabled {
|
||||
color: #888888;
|
||||
cursor: default;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_selection_title {
|
||||
text-align: center;
|
||||
padding: 16px;
|
||||
color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_selection {
|
||||
width: calc(100% - 8px);
|
||||
padding: 8px 4px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_title {
|
||||
text-align: center;
|
||||
padding: 16px;
|
||||
color: #CCCCCC;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opts {
|
||||
text-align: center;
|
||||
padding: 16px;
|
||||
color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opt {
|
||||
cursor: pointer;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opt_selected {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opt_disabled {
|
||||
color: #888888;
|
||||
cursor: default;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val_container {
|
||||
text-align: center;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val {
|
||||
min-width: 15em;
|
||||
width: calc(90% - 50px);
|
||||
font: 24px "{% global `root_class_gen` %}_font0";
|
||||
outline: none;
|
||||
resize: none;
|
||||
background-color: #000000;
|
||||
color: #CCCCCC;
|
||||
border: 2px solid white;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val:disabled {
|
||||
color: #888888;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val::-moz-selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val::selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_view_selection {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_selection {
|
||||
width: calc(100% - 8px);
|
||||
height: calc(100% - 16px);
|
||||
padding: 8px 4px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item {
|
||||
width: 100%;
|
||||
overflow-y: auto;
|
||||
cursor: pointer;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item::before {
|
||||
content: "\00a0";
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item_selected {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item_selected::before {
|
||||
content: "*";
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item_disabled {
|
||||
color: #888888;
|
||||
cursor: default;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_view_editor {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
height: calc(25% - 20px);
|
||||
padding: 10px;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item_wide {
|
||||
width: 100%;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item {
|
||||
display: inline-block;
|
||||
padding: 20px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input[type=text] {
|
||||
min-width: 15em;
|
||||
font: 24px "{% global `root_class_gen` %}_font0";
|
||||
outline: none;
|
||||
resize: none;
|
||||
background-color: #000000;
|
||||
color: #CCCCCC;
|
||||
border: 2px solid white;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input[type=text]:disabled {
|
||||
color: #888888;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input[type=checkbox] {
|
||||
zoom: 2;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item select {
|
||||
font: 24px "{% global `root_class_gen` %}_font0";
|
||||
outline: none;
|
||||
resize: none;
|
||||
background-color: #000000;
|
||||
color: #CCCCCC;
|
||||
border: 2px solid white;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item option:checked {
|
||||
background-color: #CCCCCC;
|
||||
color: #000000;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item option:disabled {
|
||||
color: #888888;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input::-moz-selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input::selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name {
|
||||
width: calc(100% - 10em);
|
||||
font: 24px "{% global `root_class_gen` %}_font0";
|
||||
outline: none;
|
||||
resize: none;
|
||||
background-color: #000000;
|
||||
color: #CCCCCC;
|
||||
border: 2px solid white;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name::-moz-selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name::selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name:disabled {
|
||||
color: #888888;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_data_format {
|
||||
padding: 2px 4px;
|
||||
border: 2px solid white;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor {
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
height: calc(75% - 22px);
|
||||
width: calc(100% - 20px);
|
||||
margin: 0px;
|
||||
padding: 10px;
|
||||
font: 24px "{% global `root_class_gen` %}_font0";
|
||||
border: none;
|
||||
border-top: 2px solid white;
|
||||
outline: none;
|
||||
resize: none;
|
||||
background-color: #000000;
|
||||
color: #CCCCCC;
|
||||
overflow: auto;
|
||||
tab-size: 4;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor:disabled {
|
||||
color: #888888;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor::-moz-selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor::selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_footer {
|
||||
flex: 0 1 auto;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_footer_text {
|
||||
text-align: left;
|
||||
padding: 0px 0px 32px 64px;
|
||||
color: #CCCCCC;
|
||||
}
|
||||
@font-face {
|
||||
font-family: "{% global `root_class_gen` %}_font0";
|
||||
src: url("data:font/woff;base64,{% embed base64 `web_cl_eagleiii_8x16.woff` %}") format("woff");
|
||||
}
|
||||
.{% global `root_class_gen` %} {
|
||||
font: 24px "{% global `root_class_gen` %}_font0";
|
||||
color: #CCCCCC;
|
||||
background-color: #000000;
|
||||
user-select: none;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.{% global `root_class_gen` %}::-moz-selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %}::selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %}::-webkit-scrollbar {
|
||||
width: 12px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ::-webkit-scrollbar {
|
||||
width: 12px;
|
||||
}
|
||||
.{% global `root_class_gen` %}::-webkit-scrollbar-track, .{% global `root_class_gen` %} ::-webkit-scrollbar-track {
|
||||
background-color: #000000;
|
||||
}
|
||||
.{% global `root_class_gen` %}::-webkit-scrollbar-thumb, .{% global `root_class_gen` %} ::-webkit-scrollbar-thumb {
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %}::-webkit-scrollbar-button, .{% global `root_class_gen` %} ::-webkit-scrollbar-button {
|
||||
display: none;
|
||||
}
|
||||
.{% global `root_class_gen` %}::-webkit-scrollbar-corner, .{% global `root_class_gen` %} ::-webkit-scrollbar-corner {
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_inner {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
min-height: 480px;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
}
|
||||
.{% global `root_class_gen` %} p {
|
||||
margin-block-start: 0px;
|
||||
margin-block-end: 0px;
|
||||
-webkit-margin-before:0px;
|
||||
-webkit-margin-after:0px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_header {
|
||||
flex: 0 1 auto;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_header_title {
|
||||
text-align: center;
|
||||
padding: 32px 0px 0px 0px;
|
||||
color: #CCCCCC;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content {
|
||||
flex: 1 1 auto;
|
||||
position: relative;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_inner {
|
||||
position: absolute;
|
||||
top: 32px;
|
||||
left: 32px;
|
||||
bottom: 32px;
|
||||
right: 32px;
|
||||
border: 2px solid white;
|
||||
z-index: 1;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup {
|
||||
position: absolute;
|
||||
top: 128px;
|
||||
left: 64px;
|
||||
bottom: 64px;
|
||||
right: 64px;
|
||||
z-index: 10;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_inner {
|
||||
width: 50%;
|
||||
min-width: min(calc(100% - 20px), 400px);
|
||||
max-width: 800px;
|
||||
max-height: calc(100% - 20px);
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
border: 2px solid white;
|
||||
background-color: #000000;
|
||||
padding: 10px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_title {
|
||||
text-align: center;
|
||||
padding: 16px;
|
||||
color: #CCCCCC;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opts {
|
||||
text-align: center;
|
||||
padding: 16px;
|
||||
color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opt {
|
||||
cursor: pointer;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opt_selected {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_confirm_opt_disabled {
|
||||
color: #888888;
|
||||
cursor: default;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_selection_title {
|
||||
text-align: center;
|
||||
padding: 16px;
|
||||
color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_selection {
|
||||
width: calc(100% - 8px);
|
||||
padding: 8px 4px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_title {
|
||||
text-align: center;
|
||||
padding: 16px;
|
||||
color: #CCCCCC;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opts {
|
||||
text-align: center;
|
||||
padding: 16px;
|
||||
color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opt {
|
||||
cursor: pointer;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opt_selected {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_opt_disabled {
|
||||
color: #888888;
|
||||
cursor: default;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val_container {
|
||||
text-align: center;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val {
|
||||
min-width: 15em;
|
||||
width: calc(90% - 50px);
|
||||
font: 24px "{% global `root_class_gen` %}_font0";
|
||||
outline: none;
|
||||
resize: none;
|
||||
background-color: #000000;
|
||||
color: #CCCCCC;
|
||||
border: 2px solid white;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val:disabled {
|
||||
color: #888888;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val::-moz-selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_popup_input_val::selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_view_selection {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_selection {
|
||||
width: calc(100% - 8px);
|
||||
height: calc(100% - 16px);
|
||||
padding: 8px 4px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item {
|
||||
width: 100%;
|
||||
overflow-y: auto;
|
||||
cursor: pointer;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item::before {
|
||||
content: "\00a0";
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item_selected {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item_selected::before {
|
||||
content: "*";
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_item_disabled {
|
||||
color: #888888;
|
||||
cursor: default;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_content_view_editor {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
height: calc(25% - 20px);
|
||||
padding: 10px;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item_wide {
|
||||
width: 100%;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item {
|
||||
display: inline-block;
|
||||
padding: 20px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input[type=text] {
|
||||
min-width: 15em;
|
||||
font: 24px "{% global `root_class_gen` %}_font0";
|
||||
outline: none;
|
||||
resize: none;
|
||||
background-color: #000000;
|
||||
color: #CCCCCC;
|
||||
border: 2px solid white;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input[type=text]:disabled {
|
||||
color: #888888;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input[type=checkbox] {
|
||||
zoom: 2;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item select {
|
||||
font: 24px "{% global `root_class_gen` %}_font0";
|
||||
outline: none;
|
||||
resize: none;
|
||||
background-color: #000000;
|
||||
color: #CCCCCC;
|
||||
border: 2px solid white;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item option:checked {
|
||||
background-color: #CCCCCC;
|
||||
color: #000000;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item option:disabled {
|
||||
color: #888888;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input::-moz-selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_item input::selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name {
|
||||
width: calc(100% - 10em);
|
||||
font: 24px "{% global `root_class_gen` %}_font0";
|
||||
outline: none;
|
||||
resize: none;
|
||||
background-color: #000000;
|
||||
color: #CCCCCC;
|
||||
border: 2px solid white;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name::-moz-selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name::selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_profile_name:disabled {
|
||||
color: #888888;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_conf_val_data_format {
|
||||
padding: 2px 4px;
|
||||
border: 2px solid white;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor {
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
height: calc(75% - 22px);
|
||||
width: calc(100% - 20px);
|
||||
margin: 0px;
|
||||
padding: 10px;
|
||||
font: 24px "{% global `root_class_gen` %}_font0";
|
||||
border: none;
|
||||
border-top: 2px solid white;
|
||||
outline: none;
|
||||
resize: none;
|
||||
background-color: #000000;
|
||||
color: #CCCCCC;
|
||||
overflow: auto;
|
||||
tab-size: 4;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor:disabled {
|
||||
color: #888888;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor::-moz-selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_launch_opt_editor::selection {
|
||||
color: #000000;
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_footer {
|
||||
flex: 0 1 auto;
|
||||
}
|
||||
.{% global `root_class_gen` %} ._eaglercraftX_boot_menu_footer_text {
|
||||
text-align: left;
|
||||
padding: 0px 0px 32px 64px;
|
||||
color: #CCCCCC;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"client_launch_type": "EAGLERX_V1",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
{
|
||||
"client_launch_type": "EAGLERX_V1",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"client_launch_type": "EAGLERX_SIGNED_V1",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
{
|
||||
"client_launch_type": "EAGLERX_SIGNED_V1",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"client_launch_type": "EAGLER_1_5_V2",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
{
|
||||
"client_launch_type": "EAGLER_1_5_V2",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"client_launch_type": "EAGLER_1_5_V1",
|
||||
"join_server": "",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
{
|
||||
"client_launch_type": "EAGLER_1_5_V1",
|
||||
"join_server": "",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"client_launch_type": "EAGLER_BETA_V1",
|
||||
"join_server": "",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
{
|
||||
"client_launch_type": "EAGLER_BETA_V1",
|
||||
"join_server": "",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"client_launch_type": "PEYTON_V2",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
{
|
||||
"client_launch_type": "PEYTON_V2",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"client_launch_type": "PEYTON_V2",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
{
|
||||
"client_launch_type": "PEYTON_V2",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"client_launch_type": "PEYTON_V1",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
{
|
||||
"client_launch_type": "PEYTON_V1",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
{
|
||||
"client_launch_type": "STANDARD_OFFLINE_V1",
|
||||
"client_launch_opts_var": "eaglercraftXOpts",
|
||||
"client_launch_opts_assetsURI_var": "assetsURI",
|
||||
"client_launch_opts_container_var": "container",
|
||||
"client_launch_main_func": "main",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
{
|
||||
"client_launch_type": "STANDARD_OFFLINE_V1",
|
||||
"client_launch_opts_var": "eaglercraftXOpts",
|
||||
"client_launch_opts_assetsURI_var": "assetsURI",
|
||||
"client_launch_opts_container_var": "container",
|
||||
"client_launch_main_func": "main",
|
||||
"clear_cookies_before_launch": false
|
||||
}
|
||||
|
@ -1,148 +1,108 @@
|
||||
{
|
||||
"defaults": {
|
||||
"EAGLERX_SIGNED_V1": {
|
||||
"conf": "conf_template_eaglercraftX_1_8_signed.json",
|
||||
"opts": "opts_template_eaglercraftX_1_8.txt"
|
||||
},
|
||||
"EAGLERX_V1": {
|
||||
"conf": "conf_template_eaglercraftX_1_8.json",
|
||||
"opts": "opts_template_eaglercraftX_1_8.txt"
|
||||
},
|
||||
"EAGLER_BETA_V1": {
|
||||
"conf": "conf_template_eaglercraft_b1_3.json",
|
||||
"opts": null
|
||||
},
|
||||
"EAGLER_1_5_V1": {
|
||||
"conf": "conf_template_eaglercraft_1_5_legacy.json",
|
||||
"opts": "opts_template_eaglercraft_1_5_legacy.txt"
|
||||
},
|
||||
"EAGLER_1_5_V2": {
|
||||
"conf": "conf_template_eaglercraft_1_5.json",
|
||||
"opts": "opts_template_eaglercraft_1_5.txt"
|
||||
},
|
||||
"PEYTON_V1": {
|
||||
"conf": "conf_template_peytonplayz585_indev.json",
|
||||
"opts": null
|
||||
},
|
||||
"PEYTON_V2": {
|
||||
"conf": "conf_template_peytonplayz585_a1_2_6.json",
|
||||
"opts": "opts_template_peytonplayz585_a1_2_6.txt"
|
||||
},
|
||||
"STANDARD_OFFLINE_V1": {
|
||||
"conf": "conf_template_standard_offline.json",
|
||||
"opts": null
|
||||
}
|
||||
},
|
||||
"templates": [
|
||||
{
|
||||
"name": "EaglercraftX 1.8",
|
||||
"conf": "conf_template_eaglercraftX_1_8.json",
|
||||
"opts": "opts_template_eaglercraftX_1_8.txt",
|
||||
"allow": [
|
||||
"EAGLER_STANDARD_OFFLINE"
|
||||
],
|
||||
"parseTypes": [
|
||||
"EAGLERCRAFTX_1_8_OFFLINE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "EaglercraftX 1.8 Signed",
|
||||
"conf": "conf_template_eaglercraftX_1_8_signed.json",
|
||||
"opts": "opts_template_eaglercraftX_1_8.txt",
|
||||
"allow": [
|
||||
"EAGLER_SIGNED_OFFLINE"
|
||||
],
|
||||
"parseTypes": [
|
||||
"EAGLERCRAFTX_1_8_SIGNED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Eaglercraft 1.5.2 (post-22w34a)",
|
||||
"conf": "conf_template_eaglercraft_1_5.json",
|
||||
"opts": "opts_template_eaglercraft_1_5.txt",
|
||||
"allow": [
|
||||
"EAGLER_STANDARD_1_5_OFFLINE"
|
||||
],
|
||||
"parseTypes": [
|
||||
"EAGLERCRAFT_1_5_NEW_OFFLINE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Eaglercraft 1.5.2 Live Music (post-22w34a)",
|
||||
"conf": "conf_template_eaglercraft_1_5.json",
|
||||
"opts": "opts_template_eaglercraft_1_5_livestream.txt",
|
||||
"allow": [
|
||||
"EAGLER_STANDARD_1_5_OFFLINE"
|
||||
],
|
||||
"parseTypes": [
|
||||
"EAGLERCRAFT_1_5_NEW_OFFLINE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Eaglercraft 1.5.2 (pre-22w34a)",
|
||||
"conf": "conf_template_eaglercraft_1_5_legacy.json",
|
||||
"opts": "opts_template_eaglercraft_1_5_legacy.txt",
|
||||
"allow": [
|
||||
"EAGLER_STANDARD_OFFLINE"
|
||||
],
|
||||
"parseTypes": [
|
||||
"EAGLERCRAFT_1_5_OLD_OFFLINE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Eaglercraft Beta 1.3",
|
||||
"conf": "conf_template_eaglercraft_b1_3.json",
|
||||
"opts": null,
|
||||
"allow": [
|
||||
"EAGLER_STANDARD_OFFLINE"
|
||||
],
|
||||
"parseTypes": [
|
||||
"EAGLERCRAFT_BETA_B1_3_OFFLINE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "PeytonPlayz585 Beta 1.7.3",
|
||||
"conf": "conf_template_peytonplayz585_b1_7_3.json",
|
||||
"opts": "opts_template_peytonplayz585_b1_7_3.txt",
|
||||
"allow": [
|
||||
"EAGLER_STANDARD_OFFLINE"
|
||||
],
|
||||
"parseTypes": [
|
||||
"PEYTONPLAYZ585_ALPHA_BETA"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "PeytonPlayz585 Alpha 1.2.6",
|
||||
"conf": "conf_template_peytonplayz585_a1_2_6.json",
|
||||
"opts": "opts_template_peytonplayz585_a1_2_6.txt",
|
||||
"allow": [
|
||||
"EAGLER_STANDARD_OFFLINE"
|
||||
],
|
||||
"parseTypes": [
|
||||
"PEYTONPLAYZ585_ALPHA_BETA"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "PeytonPlayz585 Indev",
|
||||
"conf": "conf_template_peytonplayz585_indev.json",
|
||||
"opts": null,
|
||||
"allow": [
|
||||
"EAGLER_STANDARD_OFFLINE"
|
||||
],
|
||||
"parseTypes": [
|
||||
"PEYTONPLAYZ585_INDEV"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Standard Offline Download",
|
||||
"conf": "conf_template_standard_offline.json",
|
||||
"opts": null,
|
||||
"allow": [
|
||||
"EAGLER_STANDARD_OFFLINE"
|
||||
],
|
||||
"parseTypes": [
|
||||
"EXPORTED_STANDARD_OFFLINE"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
{
|
||||
"defaults": {
|
||||
"EAGLERX_SIGNED_V1": {
|
||||
"conf": "conf_template_eaglercraftX_1_8_signed.json",
|
||||
"opts": "opts_template_eaglercraftX_1_8.txt"
|
||||
},
|
||||
"EAGLERX_V1": {
|
||||
"conf": "conf_template_eaglercraftX_1_8.json",
|
||||
"opts": "opts_template_eaglercraftX_1_8.txt"
|
||||
},
|
||||
"EAGLER_BETA_V1": {
|
||||
"conf": "conf_template_eaglercraft_b1_3.json",
|
||||
"opts": null
|
||||
},
|
||||
"EAGLER_1_5_V1": {
|
||||
"conf": "conf_template_eaglercraft_1_5_legacy.json",
|
||||
"opts": "opts_template_eaglercraft_1_5_legacy.txt"
|
||||
},
|
||||
"EAGLER_1_5_V2": {
|
||||
"conf": "conf_template_eaglercraft_1_5.json",
|
||||
"opts": "opts_template_eaglercraft_1_5.txt"
|
||||
},
|
||||
"PEYTON_V1": {
|
||||
"conf": "conf_template_peytonplayz585_indev.json",
|
||||
"opts": null
|
||||
},
|
||||
"PEYTON_V2": {
|
||||
"conf": "conf_template_peytonplayz585_a1_2_6.json",
|
||||
"opts": "opts_template_peytonplayz585_a1_2_6.txt"
|
||||
},
|
||||
"STANDARD_OFFLINE_V1": {
|
||||
"conf": "conf_template_standard_offline.json",
|
||||
"opts": null
|
||||
}
|
||||
},
|
||||
"templates": [
|
||||
{
|
||||
"name": "EaglercraftX 1.8",
|
||||
"conf": "conf_template_eaglercraftX_1_8.json",
|
||||
"opts": "opts_template_eaglercraftX_1_8.txt",
|
||||
"allow": ["EAGLER_STANDARD_OFFLINE"],
|
||||
"parseTypes": ["EAGLERCRAFTX_1_8_OFFLINE"]
|
||||
},
|
||||
{
|
||||
"name": "EaglercraftX 1.8 Signed",
|
||||
"conf": "conf_template_eaglercraftX_1_8_signed.json",
|
||||
"opts": "opts_template_eaglercraftX_1_8.txt",
|
||||
"allow": ["EAGLER_SIGNED_OFFLINE"],
|
||||
"parseTypes": ["EAGLERCRAFTX_1_8_SIGNED"]
|
||||
},
|
||||
{
|
||||
"name": "Eaglercraft 1.5.2 (post-22w34a)",
|
||||
"conf": "conf_template_eaglercraft_1_5.json",
|
||||
"opts": "opts_template_eaglercraft_1_5.txt",
|
||||
"allow": ["EAGLER_STANDARD_1_5_OFFLINE"],
|
||||
"parseTypes": ["EAGLERCRAFT_1_5_NEW_OFFLINE"]
|
||||
},
|
||||
{
|
||||
"name": "Eaglercraft 1.5.2 Live Music (post-22w34a)",
|
||||
"conf": "conf_template_eaglercraft_1_5.json",
|
||||
"opts": "opts_template_eaglercraft_1_5_livestream.txt",
|
||||
"allow": ["EAGLER_STANDARD_1_5_OFFLINE"],
|
||||
"parseTypes": ["EAGLERCRAFT_1_5_NEW_OFFLINE"]
|
||||
},
|
||||
{
|
||||
"name": "Eaglercraft 1.5.2 (pre-22w34a)",
|
||||
"conf": "conf_template_eaglercraft_1_5_legacy.json",
|
||||
"opts": "opts_template_eaglercraft_1_5_legacy.txt",
|
||||
"allow": ["EAGLER_STANDARD_OFFLINE"],
|
||||
"parseTypes": ["EAGLERCRAFT_1_5_OLD_OFFLINE"]
|
||||
},
|
||||
{
|
||||
"name": "Eaglercraft Beta 1.3",
|
||||
"conf": "conf_template_eaglercraft_b1_3.json",
|
||||
"opts": null,
|
||||
"allow": ["EAGLER_STANDARD_OFFLINE"],
|
||||
"parseTypes": ["EAGLERCRAFT_BETA_B1_3_OFFLINE"]
|
||||
},
|
||||
{
|
||||
"name": "PeytonPlayz585 Beta 1.7.3",
|
||||
"conf": "conf_template_peytonplayz585_b1_7_3.json",
|
||||
"opts": "opts_template_peytonplayz585_b1_7_3.txt",
|
||||
"allow": ["EAGLER_STANDARD_OFFLINE"],
|
||||
"parseTypes": ["PEYTONPLAYZ585_ALPHA_BETA"]
|
||||
},
|
||||
{
|
||||
"name": "PeytonPlayz585 Alpha 1.2.6",
|
||||
"conf": "conf_template_peytonplayz585_a1_2_6.json",
|
||||
"opts": "opts_template_peytonplayz585_a1_2_6.txt",
|
||||
"allow": ["EAGLER_STANDARD_OFFLINE"],
|
||||
"parseTypes": ["PEYTONPLAYZ585_ALPHA_BETA"]
|
||||
},
|
||||
{
|
||||
"name": "PeytonPlayz585 Indev",
|
||||
"conf": "conf_template_peytonplayz585_indev.json",
|
||||
"opts": null,
|
||||
"allow": ["EAGLER_STANDARD_OFFLINE"],
|
||||
"parseTypes": ["PEYTONPLAYZ585_INDEV"]
|
||||
},
|
||||
{
|
||||
"name": "Standard Offline Download",
|
||||
"conf": "conf_template_standard_offline.json",
|
||||
"opts": null,
|
||||
"allow": ["EAGLER_STANDARD_OFFLINE"],
|
||||
"parseTypes": ["EXPORTED_STANDARD_OFFLINE"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -1,86 +1,86 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;background-color:black;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />
|
||||
<meta name="description" content="${client_name}" />
|
||||
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.8" />
|
||||
<title>${client_name}</title>
|
||||
<meta property="og:locale" content="en-US" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:title" content="${client_name}" />
|
||||
<meta property="og:description" content="this file is not a website, whoever uploaded it to this URL is a dumbass" />
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"EAGLERCRAFTX_1_8_OFFLINE","launchConf":${launch_conf_json}}</style>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
var relayIdMax = ${relayId_max};
|
||||
var relayId = relayIdMax > 1 ? Math.floor(Math.random() * relayIdMax) : 0;
|
||||
|
||||
// %%%%%%%%% launch options %%%%%%%%%%%%
|
||||
|
||||
window.eaglercraftXOpts = ${launch_opts};
|
||||
|
||||
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
if(typeof window !== "undefined") window.eaglercraftXClientScriptElement = document.currentScript;
|
||||
|
||||
${classes_js}
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
(function(){
|
||||
window.eaglercraftXOpts.container = "game_frame";
|
||||
window.eaglercraftXOpts.assetsURI = ${assets_epk};
|
||||
|
||||
var launchInterval = -1;
|
||||
var launchCounter = 1;
|
||||
var launchCountdownNumberElement = null;
|
||||
var launchCountdownProgressElement = null;
|
||||
var launchSkipCountdown = false;
|
||||
|
||||
var launchTick = function() {
|
||||
launchCountdownNumberElement.innerText = "" + Math.floor(6.0 - launchCounter * 0.06);
|
||||
launchCountdownProgressElement.style.width = "" + launchCounter + "%";
|
||||
if(++launchCounter > 100 || launchSkipCountdown) {
|
||||
clearInterval(launchInterval);
|
||||
setTimeout(function() { document.body.removeChild(document.getElementById("launch_countdown_screen")); document.body.style.backgroundColor = "black"; main(); }, 50);
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener("load", function() {
|
||||
launchCountdownNumberElement = document.getElementById("launchCountdownNumber");
|
||||
launchCountdownProgressElement = document.getElementById("launchCountdownProgress");
|
||||
launchInterval = setInterval(launchTick, 50);
|
||||
document.getElementById("skipCountdown").addEventListener("click", function() {
|
||||
launchSkipCountdown = true;
|
||||
});
|
||||
document.getElementById("bootMenu").addEventListener("click", function() {
|
||||
launchSkipCountdown = true;
|
||||
window.eaglercraftXOpts.showBootMenuOnLaunch = true;
|
||||
});
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<link type="image/png" rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAR/SURBVEhLtZXZK3ZRFMYPcqXc+gv413DHxVuGIpIhkciQWaRccCNjSCkligwXSOZ5nmfv9zvn2e8+58V753sudmuvvdZ61l5r7XOc8H+GS/D19aUNkPz5+aktQH5/f//4+LBKZKuRkpUtQjCUYG5gD2T38vLy/PwsDfL9/f3Dw8PT05M0b29vnKLhCKCBT4L4gvBLBIei4//4+Hh1dUVEQutUuLu7E83FxQUGnKLBWKfQaA3S+AREVxaEOD8/Pzk50XpzcyMDcH19zdZG3N3d3dzc3Nvb01aX5pQUpQGGQJxcQpfNysoKhUIdHR1o1tbWbInYAgxIPDMzMy8vLzc3FxqOdMoRqwJK8G8ALUYIhHMiSEhIwI6CyIb0qQzC4eGhsXCc1tZWnZIEKzdQJQSXgKxfX18RCM3Z5eWlcfVAxKOjo+Pj49PTU88lTOk2NjbMsePc3t6SAfcgFdszOyMuAdeBg0CQi2lhYUHOeOLDCisN8FzcPFZXV3t7ezHY3t5GQ+6it+2xMASsKhEEWKsmRLRBBUpPvpJ/TpFKFBwKYAiITmicsbYhdHfJAltqhUCVsCQhwslmeXmZxiBQT9c0Ar9E2O3v72sYSE0N1yQArkKy0kBMXLqlZqIZHR3t6empqqqSDcBdhXEJSJ/bUc3q6uq+vj629GB9fR1WsLW1NTs7u7S0RN2locMjIyOEm5ubQ7+4uJienk4/+vv77Y1hwhLBEKhwWHitdVFfX9/Y2Gg2HuLi4owUAysrK8yCG97rh0+ApP5Q2ZycHFlPTExUVFRIBvn5+WhKSkp2dnaMKhptbW2426GgQ/rwuAQCZ1hwFayLiork9hMFBQV1dXVmE0BLS4vqw3QFB8kn4IAxoGPkYpxi4FeDmpqas7Mz4pClAgqGwD48rjY2NmacYqC0tJQ1KSlJWyE5OZkpUKkBAxZVIntAoZh04+Q48fHxPNGBgYHExMT29naj9cBodnZ2mo3jlJWVMeW2OGQck4B1amqqoaGhqamJjx2lGxwcpL0mUgR8fJhsWqJtSkoKU2SbHHUDpkhPBujd8xuQG6PJRM/Pz09PT7O1NNnZ2Tw3fgZkXVhYKCUlUhBATP+hCVyKZGky17RV0g04laayslJ6hlVeFHB4eFhKaogGd0LxtmTgE+hbhKDnPjMzgw8E3qGL2tpaBWpubjYqj2BoaEj6rq4uNATRZ0ZwCbiL6gXEzINk5vCBQJ9rMD4+rkA8QNK036uDg4Py8vLu7m680KjIBNR3zBDoWQM1g98snyB+VSoRW8C/UwR81/SvhgNj9JOTkwwVERUdRBEI0BAdLRVERkhLS8vIyEDQlrsTPTU1lVFhKxARvZgUlFLbegCf4BvIsbi4mIg4E5EogIHhiKCMtU0WUFiVy06j5fAJIDdSBDQw+PegDfBRcbOPwH4F9LuFWIIQdQNKwWqzIE0aoFUaBsw+SQuFw0uNtC9A+F4i3QNrbg3IDn+SAsHh+wYiEpeyBEMLv/cAO6KzAijxxB+Y4wisBhssJUhjEbPJf4Nw+B+JXqLW3bw+wQAAAABJRU5ErkJggg==" />
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;overflow:hidden;background-color:white;" id="game_frame">
|
||||
<div style="margin:0px;width:100%;height:100%;font-family:sans-serif;display:flex;align-items:center;user-select:none;" id="launch_countdown_screen">
|
||||
<div style="margin:auto;text-align:center;">
|
||||
<h1>${client_name}</h1>
|
||||
<h2>Game will launch in <span id="launchCountdownNumber">5</span>...</h2>
|
||||
<div style="border:2px solid black;width:100%;height:15px;padding:1px;margin-bottom:20vh;"><div id="launchCountdownProgress" style="background-color:#555555;width:0%;height:100%;"></div>
|
||||
<p style="margin-top:30px;"><button id="skipCountdown" autofocus>Skip Countdown</button> <button id="bootMenu">Enter Boot Menu</button></p></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;background-color:black;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />
|
||||
<meta name="description" content="${client_name}" />
|
||||
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.8" />
|
||||
<title>${client_name}</title>
|
||||
<meta property="og:locale" content="en-US" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:title" content="${client_name}" />
|
||||
<meta property="og:description" content="this file is not a website, whoever uploaded it to this URL is a dumbass" />
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"EAGLERCRAFTX_1_8_OFFLINE","launchConf":${launch_conf_json}}</style>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
var relayIdMax = ${relayId_max};
|
||||
var relayId = relayIdMax > 1 ? Math.floor(Math.random() * relayIdMax) : 0;
|
||||
|
||||
// %%%%%%%%% launch options %%%%%%%%%%%%
|
||||
|
||||
window.eaglercraftXOpts = ${launch_opts};
|
||||
|
||||
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
if(typeof window !== "undefined") window.eaglercraftXClientScriptElement = document.currentScript;
|
||||
|
||||
${classes_js}
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
(function(){
|
||||
window.eaglercraftXOpts.container = "game_frame";
|
||||
window.eaglercraftXOpts.assetsURI = ${assets_epk};
|
||||
|
||||
var launchInterval = -1;
|
||||
var launchCounter = 1;
|
||||
var launchCountdownNumberElement = null;
|
||||
var launchCountdownProgressElement = null;
|
||||
var launchSkipCountdown = false;
|
||||
|
||||
var launchTick = function() {
|
||||
launchCountdownNumberElement.innerText = "" + Math.floor(6.0 - launchCounter * 0.06);
|
||||
launchCountdownProgressElement.style.width = "" + launchCounter + "%";
|
||||
if(++launchCounter > 100 || launchSkipCountdown) {
|
||||
clearInterval(launchInterval);
|
||||
setTimeout(function() { document.body.removeChild(document.getElementById("launch_countdown_screen")); document.body.style.backgroundColor = "black"; main(); }, 50);
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener("load", function() {
|
||||
launchCountdownNumberElement = document.getElementById("launchCountdownNumber");
|
||||
launchCountdownProgressElement = document.getElementById("launchCountdownProgress");
|
||||
launchInterval = setInterval(launchTick, 50);
|
||||
document.getElementById("skipCountdown").addEventListener("click", function() {
|
||||
launchSkipCountdown = true;
|
||||
});
|
||||
document.getElementById("bootMenu").addEventListener("click", function() {
|
||||
launchSkipCountdown = true;
|
||||
window.eaglercraftXOpts.showBootMenuOnLaunch = true;
|
||||
});
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<link type="image/png" rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAR/SURBVEhLtZXZK3ZRFMYPcqXc+gv413DHxVuGIpIhkciQWaRccCNjSCkligwXSOZ5nmfv9zvn2e8+58V753sudmuvvdZ61l5r7XOc8H+GS/D19aUNkPz5+aktQH5/f//4+LBKZKuRkpUtQjCUYG5gD2T38vLy/PwsDfL9/f3Dw8PT05M0b29vnKLhCKCBT4L4gvBLBIei4//4+Hh1dUVEQutUuLu7E83FxQUGnKLBWKfQaA3S+AREVxaEOD8/Pzk50XpzcyMDcH19zdZG3N3d3dzc3Nvb01aX5pQUpQGGQJxcQpfNysoKhUIdHR1o1tbWbInYAgxIPDMzMy8vLzc3FxqOdMoRqwJK8G8ALUYIhHMiSEhIwI6CyIb0qQzC4eGhsXCc1tZWnZIEKzdQJQSXgKxfX18RCM3Z5eWlcfVAxKOjo+Pj49PTU88lTOk2NjbMsePc3t6SAfcgFdszOyMuAdeBg0CQi2lhYUHOeOLDCisN8FzcPFZXV3t7ezHY3t5GQ+6it+2xMASsKhEEWKsmRLRBBUpPvpJ/TpFKFBwKYAiITmicsbYhdHfJAltqhUCVsCQhwslmeXmZxiBQT9c0Ar9E2O3v72sYSE0N1yQArkKy0kBMXLqlZqIZHR3t6empqqqSDcBdhXEJSJ/bUc3q6uq+vj629GB9fR1WsLW1NTs7u7S0RN2locMjIyOEm5ubQ7+4uJienk4/+vv77Y1hwhLBEKhwWHitdVFfX9/Y2Gg2HuLi4owUAysrK8yCG97rh0+ApP5Q2ZycHFlPTExUVFRIBvn5+WhKSkp2dnaMKhptbW2426GgQ/rwuAQCZ1hwFayLiork9hMFBQV1dXVmE0BLS4vqw3QFB8kn4IAxoGPkYpxi4FeDmpqas7Mz4pClAgqGwD48rjY2NmacYqC0tJQ1KSlJWyE5OZkpUKkBAxZVIntAoZh04+Q48fHxPNGBgYHExMT29naj9cBodnZ2mo3jlJWVMeW2OGQck4B1amqqoaGhqamJjx2lGxwcpL0mUgR8fJhsWqJtSkoKU2SbHHUDpkhPBujd8xuQG6PJRM/Pz09PT7O1NNnZ2Tw3fgZkXVhYKCUlUhBATP+hCVyKZGky17RV0g04laayslJ6hlVeFHB4eFhKaogGd0LxtmTgE+hbhKDnPjMzgw8E3qGL2tpaBWpubjYqj2BoaEj6rq4uNATRZ0ZwCbiL6gXEzINk5vCBQJ9rMD4+rkA8QNK036uDg4Py8vLu7m680KjIBNR3zBDoWQM1g98snyB+VSoRW8C/UwR81/SvhgNj9JOTkwwVERUdRBEI0BAdLRVERkhLS8vIyEDQlrsTPTU1lVFhKxARvZgUlFLbegCf4BvIsbi4mIg4E5EogIHhiKCMtU0WUFiVy06j5fAJIDdSBDQw+PegDfBRcbOPwH4F9LuFWIIQdQNKwWqzIE0aoFUaBsw+SQuFw0uNtC9A+F4i3QNrbg3IDn+SAsHh+wYiEpeyBEMLv/cAO6KzAijxxB+Y4wisBhssJUhjEbPJf4Nw+B+JXqLW3bw+wQAAAABJRU5ErkJggg==" />
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;overflow:hidden;background-color:white;" id="game_frame">
|
||||
<div style="margin:0px;width:100%;height:100%;font-family:sans-serif;display:flex;align-items:center;user-select:none;" id="launch_countdown_screen">
|
||||
<div style="margin:auto;text-align:center;">
|
||||
<h1>${client_name}</h1>
|
||||
<h2>Game will launch in <span id="launchCountdownNumber">5</span>...</h2>
|
||||
<div style="border:2px solid black;width:100%;height:15px;padding:1px;margin-bottom:20vh;"><div id="launchCountdownProgress" style="background-color:#555555;width:0%;height:100%;"></div>
|
||||
<p style="margin-top:30px;"><button id="skipCountdown" autofocus>Skip Countdown</button> <button id="bootMenu">Enter Boot Menu</button></p></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,85 +1,85 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;background-color:black;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />
|
||||
<meta name="description" content="EaglercraftX 1.8" />
|
||||
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.8" />
|
||||
<title>EaglercraftX 1.8</title>
|
||||
<meta property="og:locale" content="en-US" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:title" content="EaglercraftX 1.8" />
|
||||
<meta property="og:description" content="this file is not a website, whoever uploaded it to this URL is a dumbass" />
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"EAGLERCRAFTX_1_8_FAT_OFFLINE","launchConf":${launch_conf_json}}</style>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
var relayIdMax = ${relayId_max};
|
||||
var relayId = relayIdMax > 1 ? Math.floor(Math.random() * relayIdMax) : 0;
|
||||
|
||||
// %%%%%%%%% launch options %%%%%%%%%%%%
|
||||
|
||||
window.eaglercraftXOpts = ${launch_opts};
|
||||
|
||||
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
if(typeof window !== "undefined") window.eaglercraftXClientScriptElement = document.currentScript;
|
||||
|
||||
${classes_js}
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
(function(){
|
||||
window.eaglercraftXOpts.container = "game_frame";
|
||||
window.eaglercraftXOpts.assetsURI = ${assets_epk};
|
||||
window.eaglercraftXOpts.showBootMenuOnLaunch = true;
|
||||
|
||||
var launchInterval = -1;
|
||||
var launchCounter = 1;
|
||||
var launchCountdownNumberElement = null;
|
||||
var launchCountdownProgressElement = null;
|
||||
var launchSkipCountdown = false;
|
||||
|
||||
var launchTick = function() {
|
||||
launchCountdownNumberElement.innerText = "" + Math.floor(6.0 - launchCounter * 0.06);
|
||||
launchCountdownProgressElement.style.width = "" + launchCounter + "%";
|
||||
if(++launchCounter > 100 || launchSkipCountdown) {
|
||||
clearInterval(launchInterval);
|
||||
setTimeout(function() { document.body.removeChild(document.getElementById("launch_countdown_screen")); document.body.style.backgroundColor = "black"; main(); }, 50);
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener("load", function() {
|
||||
launchCountdownNumberElement = document.getElementById("launchCountdownNumber");
|
||||
launchCountdownProgressElement = document.getElementById("launchCountdownProgress");
|
||||
launchInterval = setInterval(launchTick, 50);
|
||||
document.getElementById("skipCountdown").addEventListener("click", function() {
|
||||
launchSkipCountdown = true;
|
||||
});
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<link type="image/png" rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAR/SURBVEhLtZXZK3ZRFMYPcqXc+gv413DHxVuGIpIhkciQWaRccCNjSCkligwXSOZ5nmfv9zvn2e8+58V753sudmuvvdZ61l5r7XOc8H+GS/D19aUNkPz5+aktQH5/f//4+LBKZKuRkpUtQjCUYG5gD2T38vLy/PwsDfL9/f3Dw8PT05M0b29vnKLhCKCBT4L4gvBLBIei4//4+Hh1dUVEQutUuLu7E83FxQUGnKLBWKfQaA3S+AREVxaEOD8/Pzk50XpzcyMDcH19zdZG3N3d3dzc3Nvb01aX5pQUpQGGQJxcQpfNysoKhUIdHR1o1tbWbInYAgxIPDMzMy8vLzc3FxqOdMoRqwJK8G8ALUYIhHMiSEhIwI6CyIb0qQzC4eGhsXCc1tZWnZIEKzdQJQSXgKxfX18RCM3Z5eWlcfVAxKOjo+Pj49PTU88lTOk2NjbMsePc3t6SAfcgFdszOyMuAdeBg0CQi2lhYUHOeOLDCisN8FzcPFZXV3t7ezHY3t5GQ+6it+2xMASsKhEEWKsmRLRBBUpPvpJ/TpFKFBwKYAiITmicsbYhdHfJAltqhUCVsCQhwslmeXmZxiBQT9c0Ar9E2O3v72sYSE0N1yQArkKy0kBMXLqlZqIZHR3t6empqqqSDcBdhXEJSJ/bUc3q6uq+vj629GB9fR1WsLW1NTs7u7S0RN2locMjIyOEm5ubQ7+4uJienk4/+vv77Y1hwhLBEKhwWHitdVFfX9/Y2Gg2HuLi4owUAysrK8yCG97rh0+ApP5Q2ZycHFlPTExUVFRIBvn5+WhKSkp2dnaMKhptbW2426GgQ/rwuAQCZ1hwFayLiork9hMFBQV1dXVmE0BLS4vqw3QFB8kn4IAxoGPkYpxi4FeDmpqas7Mz4pClAgqGwD48rjY2NmacYqC0tJQ1KSlJWyE5OZkpUKkBAxZVIntAoZh04+Q48fHxPNGBgYHExMT29naj9cBodnZ2mo3jlJWVMeW2OGQck4B1amqqoaGhqamJjx2lGxwcpL0mUgR8fJhsWqJtSkoKU2SbHHUDpkhPBujd8xuQG6PJRM/Pz09PT7O1NNnZ2Tw3fgZkXVhYKCUlUhBATP+hCVyKZGky17RV0g04laayslJ6hlVeFHB4eFhKaogGd0LxtmTgE+hbhKDnPjMzgw8E3qGL2tpaBWpubjYqj2BoaEj6rq4uNATRZ0ZwCbiL6gXEzINk5vCBQJ9rMD4+rkA8QNK036uDg4Py8vLu7m680KjIBNR3zBDoWQM1g98snyB+VSoRW8C/UwR81/SvhgNj9JOTkwwVERUdRBEI0BAdLRVERkhLS8vIyEDQlrsTPTU1lVFhKxARvZgUlFLbegCf4BvIsbi4mIg4E5EogIHhiKCMtU0WUFiVy06j5fAJIDdSBDQw+PegDfBRcbOPwH4F9LuFWIIQdQNKwWqzIE0aoFUaBsw+SQuFw0uNtC9A+F4i3QNrbg3IDn+SAsHh+wYiEpeyBEMLv/cAO6KzAijxxB+Y4wisBhssJUhjEbPJf4Nw+B+JXqLW3bw+wQAAAABJRU5ErkJggg==" />
|
||||
${fat_offline_data}
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;overflow:hidden;background-color:white;" id="game_frame">
|
||||
<div style="margin:0px;width:100%;height:100%;font-family:sans-serif;display:flex;align-items:center;user-select:none;" id="launch_countdown_screen">
|
||||
<div style="margin:auto;text-align:center;">
|
||||
<h1>EaglercraftX 1.8 "Fat Offline"</h1>
|
||||
<h3>Contains: ${num_clients} Client(s)</h3>
|
||||
<h2>Game will launch in <span id="launchCountdownNumber">5</span>...</h2>
|
||||
<div style="border:2px solid black;width:100%;height:15px;padding:1px;margin-bottom:20vh;"><div id="launchCountdownProgress" style="background-color:#555555;width:0%;height:100%;"></div>
|
||||
<p style="margin-top:30px;"><button id="skipCountdown" autofocus>Skip Countdown</button></p></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;background-color:black;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />
|
||||
<meta name="description" content="EaglercraftX 1.8" />
|
||||
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.8" />
|
||||
<title>EaglercraftX 1.8</title>
|
||||
<meta property="og:locale" content="en-US" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:title" content="EaglercraftX 1.8" />
|
||||
<meta property="og:description" content="this file is not a website, whoever uploaded it to this URL is a dumbass" />
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"EAGLERCRAFTX_1_8_FAT_OFFLINE","launchConf":${launch_conf_json}}</style>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
var relayIdMax = ${relayId_max};
|
||||
var relayId = relayIdMax > 1 ? Math.floor(Math.random() * relayIdMax) : 0;
|
||||
|
||||
// %%%%%%%%% launch options %%%%%%%%%%%%
|
||||
|
||||
window.eaglercraftXOpts = ${launch_opts};
|
||||
|
||||
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
if(typeof window !== "undefined") window.eaglercraftXClientScriptElement = document.currentScript;
|
||||
|
||||
${classes_js}
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
(function(){
|
||||
window.eaglercraftXOpts.container = "game_frame";
|
||||
window.eaglercraftXOpts.assetsURI = ${assets_epk};
|
||||
window.eaglercraftXOpts.showBootMenuOnLaunch = true;
|
||||
|
||||
var launchInterval = -1;
|
||||
var launchCounter = 1;
|
||||
var launchCountdownNumberElement = null;
|
||||
var launchCountdownProgressElement = null;
|
||||
var launchSkipCountdown = false;
|
||||
|
||||
var launchTick = function() {
|
||||
launchCountdownNumberElement.innerText = "" + Math.floor(6.0 - launchCounter * 0.06);
|
||||
launchCountdownProgressElement.style.width = "" + launchCounter + "%";
|
||||
if(++launchCounter > 100 || launchSkipCountdown) {
|
||||
clearInterval(launchInterval);
|
||||
setTimeout(function() { document.body.removeChild(document.getElementById("launch_countdown_screen")); document.body.style.backgroundColor = "black"; main(); }, 50);
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener("load", function() {
|
||||
launchCountdownNumberElement = document.getElementById("launchCountdownNumber");
|
||||
launchCountdownProgressElement = document.getElementById("launchCountdownProgress");
|
||||
launchInterval = setInterval(launchTick, 50);
|
||||
document.getElementById("skipCountdown").addEventListener("click", function() {
|
||||
launchSkipCountdown = true;
|
||||
});
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<link type="image/png" rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAR/SURBVEhLtZXZK3ZRFMYPcqXc+gv413DHxVuGIpIhkciQWaRccCNjSCkligwXSOZ5nmfv9zvn2e8+58V753sudmuvvdZ61l5r7XOc8H+GS/D19aUNkPz5+aktQH5/f//4+LBKZKuRkpUtQjCUYG5gD2T38vLy/PwsDfL9/f3Dw8PT05M0b29vnKLhCKCBT4L4gvBLBIei4//4+Hh1dUVEQutUuLu7E83FxQUGnKLBWKfQaA3S+AREVxaEOD8/Pzk50XpzcyMDcH19zdZG3N3d3dzc3Nvb01aX5pQUpQGGQJxcQpfNysoKhUIdHR1o1tbWbInYAgxIPDMzMy8vLzc3FxqOdMoRqwJK8G8ALUYIhHMiSEhIwI6CyIb0qQzC4eGhsXCc1tZWnZIEKzdQJQSXgKxfX18RCM3Z5eWlcfVAxKOjo+Pj49PTU88lTOk2NjbMsePc3t6SAfcgFdszOyMuAdeBg0CQi2lhYUHOeOLDCisN8FzcPFZXV3t7ezHY3t5GQ+6it+2xMASsKhEEWKsmRLRBBUpPvpJ/TpFKFBwKYAiITmicsbYhdHfJAltqhUCVsCQhwslmeXmZxiBQT9c0Ar9E2O3v72sYSE0N1yQArkKy0kBMXLqlZqIZHR3t6empqqqSDcBdhXEJSJ/bUc3q6uq+vj629GB9fR1WsLW1NTs7u7S0RN2locMjIyOEm5ubQ7+4uJienk4/+vv77Y1hwhLBEKhwWHitdVFfX9/Y2Gg2HuLi4owUAysrK8yCG97rh0+ApP5Q2ZycHFlPTExUVFRIBvn5+WhKSkp2dnaMKhptbW2426GgQ/rwuAQCZ1hwFayLiork9hMFBQV1dXVmE0BLS4vqw3QFB8kn4IAxoGPkYpxi4FeDmpqas7Mz4pClAgqGwD48rjY2NmacYqC0tJQ1KSlJWyE5OZkpUKkBAxZVIntAoZh04+Q48fHxPNGBgYHExMT29naj9cBodnZ2mo3jlJWVMeW2OGQck4B1amqqoaGhqamJjx2lGxwcpL0mUgR8fJhsWqJtSkoKU2SbHHUDpkhPBujd8xuQG6PJRM/Pz09PT7O1NNnZ2Tw3fgZkXVhYKCUlUhBATP+hCVyKZGky17RV0g04laayslJ6hlVeFHB4eFhKaogGd0LxtmTgE+hbhKDnPjMzgw8E3qGL2tpaBWpubjYqj2BoaEj6rq4uNATRZ0ZwCbiL6gXEzINk5vCBQJ9rMD4+rkA8QNK036uDg4Py8vLu7m680KjIBNR3zBDoWQM1g98snyB+VSoRW8C/UwR81/SvhgNj9JOTkwwVERUdRBEI0BAdLRVERkhLS8vIyEDQlrsTPTU1lVFhKxARvZgUlFLbegCf4BvIsbi4mIg4E5EogIHhiKCMtU0WUFiVy06j5fAJIDdSBDQw+PegDfBRcbOPwH4F9LuFWIIQdQNKwWqzIE0aoFUaBsw+SQuFw0uNtC9A+F4i3QNrbg3IDn+SAsHh+wYiEpeyBEMLv/cAO6KzAijxxB+Y4wisBhssJUhjEbPJf4Nw+B+JXqLW3bw+wQAAAABJRU5ErkJggg==" />
|
||||
${fat_offline_data}
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;overflow:hidden;background-color:white;" id="game_frame">
|
||||
<div style="margin:0px;width:100%;height:100%;font-family:sans-serif;display:flex;align-items:center;user-select:none;" id="launch_countdown_screen">
|
||||
<div style="margin:auto;text-align:center;">
|
||||
<h1>EaglercraftX 1.8 "Fat Offline"</h1>
|
||||
<h3>Contains: ${num_clients} Client(s)</h3>
|
||||
<h2>Game will launch in <span id="launchCountdownNumber">5</span>...</h2>
|
||||
<div style="border:2px solid black;width:100%;height:15px;padding:1px;margin-bottom:20vh;"><div id="launchCountdownProgress" style="background-color:#555555;width:0%;height:100%;"></div>
|
||||
<p style="margin-top:30px;"><button id="skipCountdown" autofocus>Skip Countdown</button></p></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,78 +1,78 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>My Drive - Google Drive</title>
|
||||
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"EAGLERCRAFT_1_5_NEW_OFFLINE","launchConf":${launch_conf_json}}</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.addEventListener("load", function() {
|
||||
countdown();
|
||||
setTimeout(function(){
|
||||
document.getElementById("locally").remove();
|
||||
const relayIdMax = ${relayId_max};
|
||||
const relayId = relayIdMax > 1 ? Math.floor(Math.random() * relayIdMax) : 0;
|
||||
window.eaglercraftOpts = ${launch_opts};
|
||||
window.eaglercraftOpts.container = "game_frame";
|
||||
window.eaglercraftOpts.assetsURI = getAssetsURI();
|
||||
window.eaglercraftOpts.serverWorkerURI = createWorkerURI("sp_worker");
|
||||
main();
|
||||
}, 6000);
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function getAssetsURI() {
|
||||
return "data:application/octet-stream;base64,${assets_epk}";
|
||||
}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function createWorkerURI(el) {
|
||||
var eee = document.getElementById(el);
|
||||
var str = eee.innerHTML;
|
||||
eee.remove();
|
||||
str = "\"use strict\";var eaglercraftServerOpts;onmessage = function(o) { eaglercraftServerOpts = o.data; main(); };" + str;
|
||||
return URL.createObjectURL(new Blob([str], {type:"text/javascript"}));
|
||||
}
|
||||
</script>
|
||||
|
||||
<link type="image/png" rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAGAUlEQVRYw7VXa0xTZxj+oKjJNjWZ10EtZqIQjBdsT2utlZYiMsfiZltUtpiYOZ0zceOmcZfsGLmoQ25hS1jmNJpBL1xEuWwZGduPjW0xcVniLn/YfmlrK6wDRulpz7v3O+1BCgUs4pc8+U5Ov6/P877v837nHEKiGzHEZpYQVhcXEfQ3uuaJjOCfP9pSG5E8GXIzmS+r0Rtk1bqcxCrti+NB76XVaA3EzM6fUxHmELmm7bXkjVde6pPV6WD1x/owyBDrEaTOAD9fTeqDLpJM98CciIBgTRVW0211Rx4k1WWOSiu0flnlDgGrEBsQpELnZz9hRuErAqNNMb8IW+Ex/SCvPzJPILebjm69eQAYm8m7+doeWHVRC0guIBGxDkEupsPfDSsBmokXumLB10TeFETUk3mPFbmq89VFCovJxdhNIG80BhirCVLqd4G0Yjtg9LC5UgvkIx1c/XQTJQevXRLgWwj47MSFJVg860yMRW81VW1tPwCKRqNPYTECxZaGV2B1VTqswUw8jZFrq7ZDv/UZ8Ddh+u0xCOKDL1FEM6maVRZE46ls5lSFNUiK4IW50Qg0C6mXdsPmCg2QCj10f54iRD9il1Bymn6ezhwVZCOpURtSFIDkHaob+yk5J0YvQoMg1YbA0RpVwGsnAvEEcNAhiOiISoCuB080HEqLKUfVti8iOcU2qylArr0MfzTIaPQoQjJJBGZCEOG3kxxBRA+Jm/moDQ2M/jdlSy4l808kZ1DUdswMseW2IHkLdCI5kkXIgh/aaFuS3x96expDisaTW4wFE403DtQLvBa7gjS/nogCEgMt4bWfAMGQWIqC6Q3JsrF0SrOZl2HbebDnHxpvPFAUFYciq8WtSFxNSShZBAG8v1kQ50EfLBNEsCQ2QvTyYNtZjPVC9JaI0QfoeYDlcctt5sVjaf2aLEYCd6j/AxGz0IVeaCb1dP2tiVkQXS+37NvC2M1ItJePZDwqiopjbMZjwsYeNk40Fgo4RkmmyIKQCWgl1LBbJnUFC8H0Y2TfTON8v7IVTYnPhImGFY2FIm7DjaD5JgmgHdEuZKgndDrGhrUdYzXmBnt+LzdF9ChgH2AJDMI+VjfWUlhT4ZprJQa4OYUA8WzoFMTkhrVlUm3tAoUlr49pysPzfn9A0YhCwoGpP4gi8q7T9S/Udi4w20CiY3viKAhed+I9+pvXvu46dD0HPhuWwhYLExCAVpztsX1Qm7RgrASMfdMhdZcWa7vNh4BwqHllkwYUNqUnpZssmfEZ9hNZgrX2+NsWga+V8AgIQwsashsNeZ0cGtuUVP49m1x9B9aW9/qSynshqfyHEHrpPf758z+C4vyduzvLfA0ZZcOthnJvU0bZf83jocd7e8oGW8k5+OJbtuHuaAGBB/lKfiA/FQby10NwToV/8tf74PRG8BSlsmMClr41ol9ZNAorTvT7V7zdDyJWIpaf6AfZOwO8vsQPu6oAsi5OjWyEAdfknBmCv3Yc5N1pa8HBaMCpUD0Eo/IPKdXgStDoxR4U2iGh2HFD+t4wxBfd4xKK7tEZpIhlhXdBxfZDZvkQry8d4jJKh6fF7pJ/uacucPxnhb3g2UHAma2D+1kKBAOuLIbz7t4Krl3MTeG9kdD2DwmIP+lKji908vGFDkDwCTgvL7gH6065wFA6BBlRIAuxoWwEfs1lYYCKyNSCy8Dw9w0MULiz5CnBd13xTfvILeFkii92VkjfH0UBTh8VsKLAAZozHjCUDUclILtkENaUj8KZ03/Cg3QJ3M/UUGIfl62mQiqE01AuH3caAggHydKTroXxRU6ntNgNSwscgQ3vuiETyfVRZoACSwGScxx8d+gSeDQk4M7SU3KnS6NZGPmpGMqCtNh1OOEDPyQUOUbSzw5yBqG2Q1FjZ8kgx5SNcG986OAcmeoRyE4D107t4cnRhzVxMBPPFjra1RfQ1ZUhh1fODntwL6kB6D51C4bUpH3G9wFRAF7E6EqHj2Ptr2A0l9HdswKa97IW/2P/Wc9xkRhm/HYcEzH3Ax79wxUzwELcXIFFwBP7an7M8T8H1bLLDGWzFAAAAABJRU5ErkJggg==" />
|
||||
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
${classes_js}
|
||||
</script>
|
||||
|
||||
<script type="text/eaglerworker" id="sp_worker">
|
||||
${classes_server_js}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function countdown() {
|
||||
const c = document.getElementById("countdown");
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 4)"; }, 1000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 3)"; }, 2000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 2)"; }, 3000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 1)"; }, 4000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 0)"; }, 5000);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;font-family:sans-serif;overflow:hidden;" id="game_frame">
|
||||
<div id="locally" style="text-align:center;">
|
||||
<div style="height:5vh;"></div>
|
||||
<h2>${client_name}</h2>
|
||||
<p id="countdown" style="text-align:center;">(Game will launch in 5)</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>My Drive - Google Drive</title>
|
||||
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"EAGLERCRAFT_1_5_NEW_OFFLINE","launchConf":${launch_conf_json}}</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.addEventListener("load", function() {
|
||||
countdown();
|
||||
setTimeout(function(){
|
||||
document.getElementById("locally").remove();
|
||||
const relayIdMax = ${relayId_max};
|
||||
const relayId = relayIdMax > 1 ? Math.floor(Math.random() * relayIdMax) : 0;
|
||||
window.eaglercraftOpts = ${launch_opts};
|
||||
window.eaglercraftOpts.container = "game_frame";
|
||||
window.eaglercraftOpts.assetsURI = getAssetsURI();
|
||||
window.eaglercraftOpts.serverWorkerURI = createWorkerURI("sp_worker");
|
||||
main();
|
||||
}, 6000);
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function getAssetsURI() {
|
||||
return "data:application/octet-stream;base64,${assets_epk}";
|
||||
}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function createWorkerURI(el) {
|
||||
var eee = document.getElementById(el);
|
||||
var str = eee.innerHTML;
|
||||
eee.remove();
|
||||
str = "\"use strict\";var eaglercraftServerOpts;onmessage = function(o) { eaglercraftServerOpts = o.data; main(); };" + str;
|
||||
return URL.createObjectURL(new Blob([str], {type:"text/javascript"}));
|
||||
}
|
||||
</script>
|
||||
|
||||
<link type="image/png" rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAGAUlEQVRYw7VXa0xTZxj+oKjJNjWZ10EtZqIQjBdsT2utlZYiMsfiZltUtpiYOZ0zceOmcZfsGLmoQ25hS1jmNJpBL1xEuWwZGduPjW0xcVniLn/YfmlrK6wDRulpz7v3O+1BCgUs4pc8+U5Ov6/P877v837nHEKiGzHEZpYQVhcXEfQ3uuaJjOCfP9pSG5E8GXIzmS+r0Rtk1bqcxCrti+NB76XVaA3EzM6fUxHmELmm7bXkjVde6pPV6WD1x/owyBDrEaTOAD9fTeqDLpJM98CciIBgTRVW0211Rx4k1WWOSiu0flnlDgGrEBsQpELnZz9hRuErAqNNMb8IW+Ex/SCvPzJPILebjm69eQAYm8m7+doeWHVRC0guIBGxDkEupsPfDSsBmokXumLB10TeFETUk3mPFbmq89VFCovJxdhNIG80BhirCVLqd4G0Yjtg9LC5UgvkIx1c/XQTJQevXRLgWwj47MSFJVg860yMRW81VW1tPwCKRqNPYTECxZaGV2B1VTqswUw8jZFrq7ZDv/UZ8Ddh+u0xCOKDL1FEM6maVRZE46ls5lSFNUiK4IW50Qg0C6mXdsPmCg2QCj10f54iRD9il1Bymn6ezhwVZCOpURtSFIDkHaob+yk5J0YvQoMg1YbA0RpVwGsnAvEEcNAhiOiISoCuB080HEqLKUfVti8iOcU2qylArr0MfzTIaPQoQjJJBGZCEOG3kxxBRA+Jm/moDQ2M/jdlSy4l808kZ1DUdswMseW2IHkLdCI5kkXIgh/aaFuS3x96expDisaTW4wFE403DtQLvBa7gjS/nogCEgMt4bWfAMGQWIqC6Q3JsrF0SrOZl2HbebDnHxpvPFAUFYciq8WtSFxNSShZBAG8v1kQ50EfLBNEsCQ2QvTyYNtZjPVC9JaI0QfoeYDlcctt5sVjaf2aLEYCd6j/AxGz0IVeaCb1dP2tiVkQXS+37NvC2M1ItJePZDwqiopjbMZjwsYeNk40Fgo4RkmmyIKQCWgl1LBbJnUFC8H0Y2TfTON8v7IVTYnPhImGFY2FIm7DjaD5JgmgHdEuZKgndDrGhrUdYzXmBnt+LzdF9ChgH2AJDMI+VjfWUlhT4ZprJQa4OYUA8WzoFMTkhrVlUm3tAoUlr49pysPzfn9A0YhCwoGpP4gi8q7T9S/Udi4w20CiY3viKAhed+I9+pvXvu46dD0HPhuWwhYLExCAVpztsX1Qm7RgrASMfdMhdZcWa7vNh4BwqHllkwYUNqUnpZssmfEZ9hNZgrX2+NsWga+V8AgIQwsashsNeZ0cGtuUVP49m1x9B9aW9/qSynshqfyHEHrpPf758z+C4vyduzvLfA0ZZcOthnJvU0bZf83jocd7e8oGW8k5+OJbtuHuaAGBB/lKfiA/FQby10NwToV/8tf74PRG8BSlsmMClr41ol9ZNAorTvT7V7zdDyJWIpaf6AfZOwO8vsQPu6oAsi5OjWyEAdfknBmCv3Yc5N1pa8HBaMCpUD0Eo/IPKdXgStDoxR4U2iGh2HFD+t4wxBfd4xKK7tEZpIhlhXdBxfZDZvkQry8d4jJKh6fF7pJ/uacucPxnhb3g2UHAma2D+1kKBAOuLIbz7t4Krl3MTeG9kdD2DwmIP+lKji908vGFDkDwCTgvL7gH6065wFA6BBlRIAuxoWwEfs1lYYCKyNSCy8Dw9w0MULiz5CnBd13xTfvILeFkii92VkjfH0UBTh8VsKLAAZozHjCUDUclILtkENaUj8KZ03/Cg3QJ3M/UUGIfl62mQiqE01AuH3caAggHydKTroXxRU6ntNgNSwscgQ3vuiETyfVRZoACSwGScxx8d+gSeDQk4M7SU3KnS6NZGPmpGMqCtNh1OOEDPyQUOUbSzw5yBqG2Q1FjZ8kgx5SNcG986OAcmeoRyE4D107t4cnRhzVxMBPPFjra1RfQ1ZUhh1fODntwL6kB6D51C4bUpH3G9wFRAF7E6EqHj2Ptr2A0l9HdswKa97IW/2P/Wc9xkRhm/HYcEzH3Ax79wxUzwELcXIFFwBP7an7M8T8H1bLLDGWzFAAAAABJRU5ErkJggg==" />
|
||||
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
${classes_js}
|
||||
</script>
|
||||
|
||||
<script type="text/eaglerworker" id="sp_worker">
|
||||
${classes_server_js}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function countdown() {
|
||||
const c = document.getElementById("countdown");
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 4)"; }, 1000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 3)"; }, 2000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 2)"; }, 3000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 1)"; }, 4000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 0)"; }, 5000);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;font-family:sans-serif;overflow:hidden;" id="game_frame">
|
||||
<div id="locally" style="text-align:center;">
|
||||
<div style="height:5vh;"></div>
|
||||
<h2>${client_name}</h2>
|
||||
<p id="countdown" style="text-align:center;">(Game will launch in 5)</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,59 +1,59 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>${client_name}</title>
|
||||
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"EAGLERCRAFT_1_5_OLD_OFFLINE","launchConf":${launch_conf_json}}</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.addEventListener("load", function() {
|
||||
countdown();
|
||||
setTimeout(function(){
|
||||
document.getElementById("locally").remove();
|
||||
window.minecraftOpts = [ "game_frame", getAssetsURI(), "${launch_opts}" ];
|
||||
main();
|
||||
}, 6000);
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function getAssetsURI() {
|
||||
return "data:application/octet-stream;base64,${assets_epk}";
|
||||
}
|
||||
</script>
|
||||
|
||||
<link type="image/x-icon" rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAICAQAAEABADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3d3d3d3d3d3d3d3d3cHiIiIiIiIiIiIiIiIiIiHB4f/////////////////hweH/////////////////4cHh/////cAAHiI//////+HB4f///8REREAiIj/////hweH///3GNmREHAAAIiI/4cHh///8Y2ZmREHeqoIiI+HB4f///GNmZmRB3qqIIiIhweH///xjZmZkQd6qiIIiIcHh///8Y2ZmZEHqqoiD/+HB4f///cY2ZmRd6qqIg//hweH////EY2ZEXqqqiIP/4cHh/////cREXL6qqoiD/+HB4f////////y////Ig//hweH/////////yIiIoIP/4cHh//////////yIiIoD/+HB4f//////////yIiIn//hweH/////////////////4cHh/////////////////+HB4d3d3d3d3d3d3d3d3d3hweIiIiIiIiIiIiIiIiIiIcHhMwiRERERERERAAAAAAHB4TsokRERERERESICICIBweEETNEREREREREiAiAiAcHhJGzRERERERERERERERHB4iIiIiIiIiIiIiIiIiIhwd3d3d3d3d3d3d3d3d3d3cAAAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////w==" />
|
||||
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
${classes_js}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function countdown() {
|
||||
const c = document.getElementById("countdown");
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 4)"; }, 1000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 3)"; }, 2000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 2)"; }, 3000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 1)"; }, 4000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 0)"; }, 5000);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;font-family:sans-serif;overflow:hidden;" id="game_frame">
|
||||
<div id="locally" style="text-align:center;">
|
||||
<div style="height:5vh;"></div>
|
||||
<h2>${client_name}</h2>
|
||||
<p id="countdown" style="text-align:center;">(Game will launch in 5)</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>${client_name}</title>
|
||||
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"EAGLERCRAFT_1_5_OLD_OFFLINE","launchConf":${launch_conf_json}}</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.addEventListener("load", function() {
|
||||
countdown();
|
||||
setTimeout(function(){
|
||||
document.getElementById("locally").remove();
|
||||
window.minecraftOpts = [ "game_frame", getAssetsURI(), "${launch_opts}" ];
|
||||
main();
|
||||
}, 6000);
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function getAssetsURI() {
|
||||
return "data:application/octet-stream;base64,${assets_epk}";
|
||||
}
|
||||
</script>
|
||||
|
||||
<link type="image/x-icon" rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAICAQAAEABADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3d3d3d3d3d3d3d3d3cHiIiIiIiIiIiIiIiIiIiHB4f/////////////////hweH/////////////////4cHh/////cAAHiI//////+HB4f///8REREAiIj/////hweH///3GNmREHAAAIiI/4cHh///8Y2ZmREHeqoIiI+HB4f///GNmZmRB3qqIIiIhweH///xjZmZkQd6qiIIiIcHh///8Y2ZmZEHqqoiD/+HB4f///cY2ZmRd6qqIg//hweH////EY2ZEXqqqiIP/4cHh/////cREXL6qqoiD/+HB4f////////y////Ig//hweH/////////yIiIoIP/4cHh//////////yIiIoD/+HB4f//////////yIiIn//hweH/////////////////4cHh/////////////////+HB4d3d3d3d3d3d3d3d3d3hweIiIiIiIiIiIiIiIiIiIcHhMwiRERERERERAAAAAAHB4TsokRERERERESICICIBweEETNEREREREREiAiAiAcHhJGzRERERERERERERERHB4iIiIiIiIiIiIiIiIiIhwd3d3d3d3d3d3d3d3d3d3cAAAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////w==" />
|
||||
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
${classes_js}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function countdown() {
|
||||
const c = document.getElementById("countdown");
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 4)"; }, 1000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 3)"; }, 2000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 2)"; }, 3000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 1)"; }, 4000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 0)"; }, 5000);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;font-family:sans-serif;overflow:hidden;" id="game_frame">
|
||||
<div id="locally" style="text-align:center;">
|
||||
<div style="height:5vh;"></div>
|
||||
<h2>${client_name}</h2>
|
||||
<p id="countdown" style="text-align:center;">(Game will launch in 5)</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,59 +1,59 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>${client_name}</title>
|
||||
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"EAGLERCRAFT_BETA_B1_3_OFFLINE","launchConf":${launch_conf_json}}</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.addEventListener("load", function() {
|
||||
countdown();
|
||||
setTimeout(function(){
|
||||
document.getElementById("locally").remove();
|
||||
window.minecraftOpts = [ "game_frame", getAssetsURI() ];
|
||||
main();
|
||||
}, 6000);
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function getAssetsURI() {
|
||||
return "data:application/octet-stream;base64,${assets_epk}";
|
||||
}
|
||||
</script>
|
||||
|
||||
<link type="image/x-icon" rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAICAQAAEABADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3d3d3d3d3d3d3d3d3cHiIiIiIiIiIiIiIiIiIiHB4f/////////////////hweH/////////////////4cHh/////cAAHiI//////+HB4f///8REREAiIj/////hweH///3GNmREHAAAIiI/4cHh///8Y2ZmREHeqoIiI+HB4f///GNmZmRB3qqIIiIhweH///xjZmZkQd6qiIIiIcHh///8Y2ZmZEHqqoiD/+HB4f///cY2ZmRd6qqIg//hweH////EY2ZEXqqqiIP/4cHh/////cREXL6qqoiD/+HB4f////////y////Ig//hweH/////////yIiIoIP/4cHh//////////yIiIoD/+HB4f//////////yIiIn//hweH/////////////////4cHh/////////////////+HB4d3d3d3d3d3d3d3d3d3hweIiIiIiIiIiIiIiIiIiIcHhMwiRERERERERAAAAAAHB4TsokRERERERESICICIBweEETNEREREREREiAiAiAcHhJGzRERERERERERERERHB4iIiIiIiIiIiIiIiIiIhwd3d3d3d3d3d3d3d3d3d3cAAAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////w==" />
|
||||
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
${classes_js}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function countdown() {
|
||||
const c = document.getElementById("countdown");
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 4)"; }, 1000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 3)"; }, 2000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 2)"; }, 3000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 1)"; }, 4000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 0)"; }, 5000);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;font-family:sans-serif;overflow:hidden;" id="game_frame">
|
||||
<div id="locally" style="text-align:center;">
|
||||
<div style="height:5vh;"></div>
|
||||
<h2>${client_name}</h2>
|
||||
<p id="countdown" style="text-align:center;">(Game will launch in 5)</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>${client_name}</title>
|
||||
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"EAGLERCRAFT_BETA_B1_3_OFFLINE","launchConf":${launch_conf_json}}</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.addEventListener("load", function() {
|
||||
countdown();
|
||||
setTimeout(function(){
|
||||
document.getElementById("locally").remove();
|
||||
window.minecraftOpts = [ "game_frame", getAssetsURI() ];
|
||||
main();
|
||||
}, 6000);
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function getAssetsURI() {
|
||||
return "data:application/octet-stream;base64,${assets_epk}";
|
||||
}
|
||||
</script>
|
||||
|
||||
<link type="image/x-icon" rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAICAQAAEABADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3d3d3d3d3d3d3d3d3cHiIiIiIiIiIiIiIiIiIiHB4f/////////////////hweH/////////////////4cHh/////cAAHiI//////+HB4f///8REREAiIj/////hweH///3GNmREHAAAIiI/4cHh///8Y2ZmREHeqoIiI+HB4f///GNmZmRB3qqIIiIhweH///xjZmZkQd6qiIIiIcHh///8Y2ZmZEHqqoiD/+HB4f///cY2ZmRd6qqIg//hweH////EY2ZEXqqqiIP/4cHh/////cREXL6qqoiD/+HB4f////////y////Ig//hweH/////////yIiIoIP/4cHh//////////yIiIoD/+HB4f//////////yIiIn//hweH/////////////////4cHh/////////////////+HB4d3d3d3d3d3d3d3d3d3hweIiIiIiIiIiIiIiIiIiIcHhMwiRERERERERAAAAAAHB4TsokRERERERESICICIBweEETNEREREREREiAiAiAcHhJGzRERERERERERERERHB4iIiIiIiIiIiIiIiIiIhwd3d3d3d3d3d3d3d3d3d3cAAAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////w==" />
|
||||
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
${classes_js}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function countdown() {
|
||||
const c = document.getElementById("countdown");
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 4)"; }, 1000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 3)"; }, 2000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 2)"; }, 3000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 1)"; }, 4000);
|
||||
setTimeout(function(){ c.innerText = "(Game will launch in 0)"; }, 5000);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;font-family:sans-serif;overflow:hidden;" id="game_frame">
|
||||
<div id="locally" style="text-align:center;">
|
||||
<div style="height:5vh;"></div>
|
||||
<h2>${client_name}</h2>
|
||||
<p id="countdown" style="text-align:center;">(Game will launch in 5)</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,40 +1,40 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>${client_name}</title>
|
||||
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"PEYTONPLAYZ585_ALPHA_BETA","launchConf":${launch_conf_json}}</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.addEventListener("load", function() {
|
||||
window.config = ${launch_opts};
|
||||
window.config.gameContainer = "game_frame";
|
||||
window.config.assetsLocation = getAssetsURI();
|
||||
main();
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function getAssetsURI() {
|
||||
return "data:application/octet-stream;base64,${assets_epk}";
|
||||
}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
${classes_js}
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;overflow:hidden;" id="game_frame">
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>${client_name}</title>
|
||||
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"PEYTONPLAYZ585_ALPHA_BETA","launchConf":${launch_conf_json}}</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.addEventListener("load", function() {
|
||||
window.config = ${launch_opts};
|
||||
window.config.gameContainer = "game_frame";
|
||||
window.config.assetsLocation = getAssetsURI();
|
||||
main();
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function getAssetsURI() {
|
||||
return "data:application/octet-stream;base64,${assets_epk}";
|
||||
}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
${classes_js}
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;overflow:hidden;" id="game_frame">
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,38 +1,38 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>${client_name}</title>
|
||||
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"PEYTONPLAYZ585_INDEV","launchConf":${launch_conf_json}}</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.addEventListener("load", function() {
|
||||
window.classicConfig = [ "game_frame", getAssetsURI() ];
|
||||
main();
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function getAssetsURI() {
|
||||
return "data:application/octet-stream;base64,${assets_epk}";
|
||||
}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
${classes_js}
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;overflow:hidden;" id="game_frame">
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>${client_name}</title>
|
||||
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"PEYTONPLAYZ585_INDEV","launchConf":${launch_conf_json}}</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.addEventListener("load", function() {
|
||||
window.classicConfig = [ "game_frame", getAssetsURI() ];
|
||||
main();
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
function getAssetsURI() {
|
||||
return "data:application/octet-stream;base64,${assets_epk}";
|
||||
}
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
${classes_js}
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;overflow:hidden;" id="game_frame">
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,77 +1,77 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="description" content="${client_name}" />
|
||||
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.8" />
|
||||
<title>${client_name}</title>
|
||||
<meta property="og:locale" content="en-US" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:title" content="${client_name}" />
|
||||
<meta property="og:description" content="this file is not a website, whoever uploaded it to this URL is a dumbass" />
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"EXPORTED_STANDARD_OFFLINE","launchConf":${launch_conf_json}}</style>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
const relayIdMax = ${relayId_max};
|
||||
const relayId = relayIdMax > 1 ? Math.floor(Math.random() * relayIdMax) : 0;
|
||||
|
||||
// %%%%%%%%% launch options %%%%%%%%%%%%
|
||||
|
||||
window["${launch_opts_var_name}"] = ${launch_opts};
|
||||
|
||||
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
if(typeof window !== "undefined") window.eaglercraftXClientScriptElement = document.currentScript;
|
||||
|
||||
${classes_js}
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
(function(){
|
||||
window["${launch_opts_var_name}"]["${launch_opts_var_container_name}"] = "game_frame";
|
||||
window["${launch_opts_var_name}"]["${launch_opts_var_assetsURI_name}"] = /*{:BEGIN_ASSETS_EPK:}*/${assets_epk}/*{:END_ASSETS_EPK:}*/;
|
||||
|
||||
var launchInterval = -1;
|
||||
var launchCounter = 1;
|
||||
var launchCountdownNumberElement = null;
|
||||
var launchCountdownProgressElement = null;
|
||||
|
||||
function launchTick() {
|
||||
launchCountdownNumberElement.innerText = "" + Math.floor(6.0 - launchCounter * 0.06);
|
||||
launchCountdownProgressElement.style.width = "" + launchCounter + "%";
|
||||
if(++launchCounter > 100) {
|
||||
clearInterval(launchInterval);
|
||||
setTimeout(() => { document.getElementById("launch_countdown_screen").remove(); window["${main_function_name}"](); }, 50);
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("load", () => {
|
||||
launchCountdownNumberElement = document.getElementById("launchCountdownNumber");
|
||||
launchCountdownProgressElement = document.getElementById("launchCountdownProgress");
|
||||
launchInterval = setInterval(launchTick, 50);
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<link type="image/png" rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAR/SURBVEhLtZXZK3ZRFMYPcqXc+gv413DHxVuGIpIhkciQWaRccCNjSCkligwXSOZ5nmfv9zvn2e8+58V753sudmuvvdZ61l5r7XOc8H+GS/D19aUNkPz5+aktQH5/f//4+LBKZKuRkpUtQjCUYG5gD2T38vLy/PwsDfL9/f3Dw8PT05M0b29vnKLhCKCBT4L4gvBLBIei4//4+Hh1dUVEQutUuLu7E83FxQUGnKLBWKfQaA3S+AREVxaEOD8/Pzk50XpzcyMDcH19zdZG3N3d3dzc3Nvb01aX5pQUpQGGQJxcQpfNysoKhUIdHR1o1tbWbInYAgxIPDMzMy8vLzc3FxqOdMoRqwJK8G8ALUYIhHMiSEhIwI6CyIb0qQzC4eGhsXCc1tZWnZIEKzdQJQSXgKxfX18RCM3Z5eWlcfVAxKOjo+Pj49PTU88lTOk2NjbMsePc3t6SAfcgFdszOyMuAdeBg0CQi2lhYUHOeOLDCisN8FzcPFZXV3t7ezHY3t5GQ+6it+2xMASsKhEEWKsmRLRBBUpPvpJ/TpFKFBwKYAiITmicsbYhdHfJAltqhUCVsCQhwslmeXmZxiBQT9c0Ar9E2O3v72sYSE0N1yQArkKy0kBMXLqlZqIZHR3t6empqqqSDcBdhXEJSJ/bUc3q6uq+vj629GB9fR1WsLW1NTs7u7S0RN2locMjIyOEm5ubQ7+4uJienk4/+vv77Y1hwhLBEKhwWHitdVFfX9/Y2Gg2HuLi4owUAysrK8yCG97rh0+ApP5Q2ZycHFlPTExUVFRIBvn5+WhKSkp2dnaMKhptbW2426GgQ/rwuAQCZ1hwFayLiork9hMFBQV1dXVmE0BLS4vqw3QFB8kn4IAxoGPkYpxi4FeDmpqas7Mz4pClAgqGwD48rjY2NmacYqC0tJQ1KSlJWyE5OZkpUKkBAxZVIntAoZh04+Q48fHxPNGBgYHExMT29naj9cBodnZ2mo3jlJWVMeW2OGQck4B1amqqoaGhqamJjx2lGxwcpL0mUgR8fJhsWqJtSkoKU2SbHHUDpkhPBujd8xuQG6PJRM/Pz09PT7O1NNnZ2Tw3fgZkXVhYKCUlUhBATP+hCVyKZGky17RV0g04laayslJ6hlVeFHB4eFhKaogGd0LxtmTgE+hbhKDnPjMzgw8E3qGL2tpaBWpubjYqj2BoaEj6rq4uNATRZ0ZwCbiL6gXEzINk5vCBQJ9rMD4+rkA8QNK036uDg4Py8vLu7m680KjIBNR3zBDoWQM1g98snyB+VSoRW8C/UwR81/SvhgNj9JOTkwwVERUdRBEI0BAdLRVERkhLS8vIyEDQlrsTPTU1lVFhKxARvZgUlFLbegCf4BvIsbi4mIg4E5EogIHhiKCMtU0WUFiVy06j5fAJIDdSBDQw+PegDfBRcbOPwH4F9LuFWIIQdQNKwWqzIE0aoFUaBsw+SQuFw0uNtC9A+F4i3QNrbg3IDn+SAsHh+wYiEpeyBEMLv/cAO6KzAijxxB+Y4wisBhssJUhjEbPJf4Nw+B+JXqLW3bw+wQAAAABJRU5ErkJggg==" />
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;overflow:hidden;" id="game_frame">
|
||||
<div style="margin:0px;width:100%;height:100%;font-family:sans-serif;display:flex;align-items:center;user-select:none;" id="launch_countdown_screen">
|
||||
<div style="margin:auto;text-align:center;">
|
||||
<h1>${client_name}</h1>
|
||||
<h2>Game will launch in <span id="launchCountdownNumber">5</span>...</h2>
|
||||
<div style="border:2px solid black;width:100%;height:15px;padding:1px;margin-bottom:20vh;"><div id="launchCountdownProgress" style="background-color:#555555;width:0%;height:100%;"></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
|
||||
<!--
|
||||
|
||||
This file is from ${date}, it was generated using EaglercraftX 1.8 boot manager
|
||||
|
||||
-->
|
||||
|
||||
<html style="width:100%;height:100%;">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="description" content="${client_name}" />
|
||||
<meta name="keywords" content="eaglercraft, eaglercraftx, minecraft, 1.8, 1.8.8" />
|
||||
<title>${client_name}</title>
|
||||
<meta property="og:locale" content="en-US" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:title" content="${client_name}" />
|
||||
<meta property="og:description" content="this file is not a website, whoever uploaded it to this URL is a dumbass" />
|
||||
<style type="eaglercraftOfflineParseHint">{"type":"EXPORTED_STANDARD_OFFLINE","launchConf":${launch_conf_json}}</style>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
const relayIdMax = ${relayId_max};
|
||||
const relayId = relayIdMax > 1 ? Math.floor(Math.random() * relayIdMax) : 0;
|
||||
|
||||
// %%%%%%%%% launch options %%%%%%%%%%%%
|
||||
|
||||
window["${launch_opts_var_name}"] = ${launch_opts};
|
||||
|
||||
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
if(typeof window !== "undefined") window.eaglercraftXClientScriptElement = document.currentScript;
|
||||
|
||||
${classes_js}
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
(function(){
|
||||
window["${launch_opts_var_name}"]["${launch_opts_var_container_name}"] = "game_frame";
|
||||
window["${launch_opts_var_name}"]["${launch_opts_var_assetsURI_name}"] = /*{:BEGIN_ASSETS_EPK:}*/${assets_epk}/*{:END_ASSETS_EPK:}*/;
|
||||
|
||||
var launchInterval = -1;
|
||||
var launchCounter = 1;
|
||||
var launchCountdownNumberElement = null;
|
||||
var launchCountdownProgressElement = null;
|
||||
|
||||
function launchTick() {
|
||||
launchCountdownNumberElement.innerText = "" + Math.floor(6.0 - launchCounter * 0.06);
|
||||
launchCountdownProgressElement.style.width = "" + launchCounter + "%";
|
||||
if(++launchCounter > 100) {
|
||||
clearInterval(launchInterval);
|
||||
setTimeout(() => { document.getElementById("launch_countdown_screen").remove(); window["${main_function_name}"](); }, 50);
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("load", () => {
|
||||
launchCountdownNumberElement = document.getElementById("launchCountdownNumber");
|
||||
launchCountdownProgressElement = document.getElementById("launchCountdownProgress");
|
||||
launchInterval = setInterval(launchTick, 50);
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<link type="image/png" rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAR/SURBVEhLtZXZK3ZRFMYPcqXc+gv413DHxVuGIpIhkciQWaRccCNjSCkligwXSOZ5nmfv9zvn2e8+58V753sudmuvvdZ61l5r7XOc8H+GS/D19aUNkPz5+aktQH5/f//4+LBKZKuRkpUtQjCUYG5gD2T38vLy/PwsDfL9/f3Dw8PT05M0b29vnKLhCKCBT4L4gvBLBIei4//4+Hh1dUVEQutUuLu7E83FxQUGnKLBWKfQaA3S+AREVxaEOD8/Pzk50XpzcyMDcH19zdZG3N3d3dzc3Nvb01aX5pQUpQGGQJxcQpfNysoKhUIdHR1o1tbWbInYAgxIPDMzMy8vLzc3FxqOdMoRqwJK8G8ALUYIhHMiSEhIwI6CyIb0qQzC4eGhsXCc1tZWnZIEKzdQJQSXgKxfX18RCM3Z5eWlcfVAxKOjo+Pj49PTU88lTOk2NjbMsePc3t6SAfcgFdszOyMuAdeBg0CQi2lhYUHOeOLDCisN8FzcPFZXV3t7ezHY3t5GQ+6it+2xMASsKhEEWKsmRLRBBUpPvpJ/TpFKFBwKYAiITmicsbYhdHfJAltqhUCVsCQhwslmeXmZxiBQT9c0Ar9E2O3v72sYSE0N1yQArkKy0kBMXLqlZqIZHR3t6empqqqSDcBdhXEJSJ/bUc3q6uq+vj629GB9fR1WsLW1NTs7u7S0RN2locMjIyOEm5ubQ7+4uJienk4/+vv77Y1hwhLBEKhwWHitdVFfX9/Y2Gg2HuLi4owUAysrK8yCG97rh0+ApP5Q2ZycHFlPTExUVFRIBvn5+WhKSkp2dnaMKhptbW2426GgQ/rwuAQCZ1hwFayLiork9hMFBQV1dXVmE0BLS4vqw3QFB8kn4IAxoGPkYpxi4FeDmpqas7Mz4pClAgqGwD48rjY2NmacYqC0tJQ1KSlJWyE5OZkpUKkBAxZVIntAoZh04+Q48fHxPNGBgYHExMT29naj9cBodnZ2mo3jlJWVMeW2OGQck4B1amqqoaGhqamJjx2lGxwcpL0mUgR8fJhsWqJtSkoKU2SbHHUDpkhPBujd8xuQG6PJRM/Pz09PT7O1NNnZ2Tw3fgZkXVhYKCUlUhBATP+hCVyKZGky17RV0g04laayslJ6hlVeFHB4eFhKaogGd0LxtmTgE+hbhKDnPjMzgw8E3qGL2tpaBWpubjYqj2BoaEj6rq4uNATRZ0ZwCbiL6gXEzINk5vCBQJ9rMD4+rkA8QNK036uDg4Py8vLu7m680KjIBNR3zBDoWQM1g98snyB+VSoRW8C/UwR81/SvhgNj9JOTkwwVERUdRBEI0BAdLRVERkhLS8vIyEDQlrsTPTU1lVFhKxARvZgUlFLbegCf4BvIsbi4mIg4E5EogIHhiKCMtU0WUFiVy06j5fAJIDdSBDQw+PegDfBRcbOPwH4F9LuFWIIQdQNKwWqzIE0aoFUaBsw+SQuFw0uNtC9A+F4i3QNrbg3IDn+SAsHh+wYiEpeyBEMLv/cAO6KzAijxxB+Y4wisBhssJUhjEbPJf4Nw+B+JXqLW3bw+wQAAAABJRU5ErkJggg==" />
|
||||
</head>
|
||||
<body style="margin:0px;width:100%;height:100%;overflow:hidden;" id="game_frame">
|
||||
<div style="margin:0px;width:100%;height:100%;font-family:sans-serif;display:flex;align-items:center;user-select:none;" id="launch_countdown_screen">
|
||||
<div style="margin:auto;text-align:center;">
|
||||
<h1>${client_name}</h1>
|
||||
<h2>Game will launch in <span id="launchCountdownNumber">5</span>...</h2>
|
||||
<div style="border:2px solid black;width:100%;height:15px;padding:1px;margin-bottom:20vh;"><div id="launchCountdownProgress" style="background-color:#555555;width:0%;height:100%;"></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,69 +1,69 @@
|
||||
{
|
||||
"joinServer": null,
|
||||
"servers": [
|
||||
{
|
||||
"addr": "ws://localhost:8081/",
|
||||
"hideAddr": false,
|
||||
"name": "Local test server"
|
||||
}
|
||||
],
|
||||
"relays": [
|
||||
{
|
||||
"addr": "wss://relay.deev.is/",
|
||||
"primary": "$random_relay_primary_0",
|
||||
"comment": "lax1dude relay #1"
|
||||
},
|
||||
{
|
||||
"addr": "wss://relay.lax1dude.net/",
|
||||
"primary": "$random_relay_primary_1",
|
||||
"comment": "lax1dude relay #2"
|
||||
},
|
||||
{
|
||||
"addr": "wss://relay.shhnowisnottheti.me/",
|
||||
"primary": "$random_relay_primary_2",
|
||||
"comment": "ayunami relay #1"
|
||||
}
|
||||
],
|
||||
"openDebugConsoleOnLaunch": false,
|
||||
"showBootMenuOnLaunch": false,
|
||||
"bootMenuBlocksUnsignedClients": false,
|
||||
"allowBootMenu": true,
|
||||
"forceWebViewSupport": false,
|
||||
"enableServerCookies": true,
|
||||
"enableDownloadOfflineButton": true,
|
||||
"downloadOfflineButtonLink": null,
|
||||
"resourcePacksDB": "resourcePacks_starlike",
|
||||
"enableWebViewCSP": true,
|
||||
"checkRelaysForUpdates": true,
|
||||
"allowServerRedirects": true,
|
||||
"allowUpdateSvc": true,
|
||||
"html5CursorSupport": false,
|
||||
"allowFNAWSkins": true,
|
||||
"allowVoiceClient": true,
|
||||
"worldsDB": "worlds_starlike",
|
||||
"demoMode": false,
|
||||
"localStorageNamespace": "_eaglercraftX_starlike",
|
||||
"enableSignatureBadge": false,
|
||||
"lang": "en_US",
|
||||
"enableMinceraft": true,
|
||||
"autoFixLegacyStyleAttr": true,
|
||||
"allowUpdateDL": true,
|
||||
"logInvalidCerts": true,
|
||||
"checkGLErrors": false,
|
||||
"checkShaderGLErrors": false,
|
||||
"crashOnUncaughtExceptions": false,
|
||||
"forceWebGL1": false,
|
||||
"forceWebGL2": false,
|
||||
"allowExperimentalWebGL1": true,
|
||||
"useWebGLExt": true,
|
||||
"useDelayOnSwap": false,
|
||||
"useJOrbisAudioDecoder": false,
|
||||
"useXHRFetch": false,
|
||||
"useVisualViewport": true,
|
||||
"deobfStackTraces": true,
|
||||
"disableBlobURLs": false,
|
||||
"eaglerNoDelay": false,
|
||||
"ramdiskMode": false,
|
||||
"singleThreadMode": false,
|
||||
"enableEPKVersionCheck": true
|
||||
}
|
||||
{
|
||||
"joinServer": null,
|
||||
"servers": [
|
||||
{
|
||||
"addr": "ws://localhost:8081/",
|
||||
"hideAddr": false,
|
||||
"name": "Local test server"
|
||||
}
|
||||
],
|
||||
"relays": [
|
||||
{
|
||||
"addr": "wss://relay.deev.is/",
|
||||
"primary": "$random_relay_primary_0",
|
||||
"comment": "lax1dude relay #1"
|
||||
},
|
||||
{
|
||||
"addr": "wss://relay.lax1dude.net/",
|
||||
"primary": "$random_relay_primary_1",
|
||||
"comment": "lax1dude relay #2"
|
||||
},
|
||||
{
|
||||
"addr": "wss://relay.shhnowisnottheti.me/",
|
||||
"primary": "$random_relay_primary_2",
|
||||
"comment": "ayunami relay #1"
|
||||
}
|
||||
],
|
||||
"openDebugConsoleOnLaunch": false,
|
||||
"showBootMenuOnLaunch": false,
|
||||
"bootMenuBlocksUnsignedClients": false,
|
||||
"allowBootMenu": true,
|
||||
"forceWebViewSupport": false,
|
||||
"enableServerCookies": true,
|
||||
"enableDownloadOfflineButton": true,
|
||||
"downloadOfflineButtonLink": null,
|
||||
"resourcePacksDB": "resourcePacks_starlike",
|
||||
"enableWebViewCSP": true,
|
||||
"checkRelaysForUpdates": true,
|
||||
"allowServerRedirects": true,
|
||||
"allowUpdateSvc": true,
|
||||
"html5CursorSupport": false,
|
||||
"allowFNAWSkins": true,
|
||||
"allowVoiceClient": true,
|
||||
"worldsDB": "worlds_starlike",
|
||||
"demoMode": false,
|
||||
"localStorageNamespace": "_eaglercraftX_starlike",
|
||||
"enableSignatureBadge": false,
|
||||
"lang": "en_US",
|
||||
"enableMinceraft": true,
|
||||
"autoFixLegacyStyleAttr": true,
|
||||
"allowUpdateDL": true,
|
||||
"logInvalidCerts": true,
|
||||
"checkGLErrors": false,
|
||||
"checkShaderGLErrors": false,
|
||||
"crashOnUncaughtExceptions": false,
|
||||
"forceWebGL1": false,
|
||||
"forceWebGL2": false,
|
||||
"allowExperimentalWebGL1": true,
|
||||
"useWebGLExt": true,
|
||||
"useDelayOnSwap": false,
|
||||
"useJOrbisAudioDecoder": false,
|
||||
"useXHRFetch": false,
|
||||
"useVisualViewport": true,
|
||||
"deobfStackTraces": true,
|
||||
"disableBlobURLs": false,
|
||||
"eaglerNoDelay": false,
|
||||
"ramdiskMode": false,
|
||||
"singleThreadMode": false,
|
||||
"enableEPKVersionCheck": true
|
||||
}
|
||||
|
@ -1,52 +1,52 @@
|
||||
{
|
||||
"joinServer": null,
|
||||
"servers": [
|
||||
{
|
||||
"serverName": "Local Test Server",
|
||||
"serverAddress": "localhost:25565",
|
||||
"hideAddress": false
|
||||
}
|
||||
],
|
||||
"relays": [
|
||||
{
|
||||
"addr": "wss://relay.deev.is/",
|
||||
"name": "lax1dude relay #1",
|
||||
"primary": "$random_relay_primary_0"
|
||||
},
|
||||
{
|
||||
"addr": "wss://relay.lax1dude.net/",
|
||||
"name": "lax1dude relay #2",
|
||||
"primary": "$random_relay_primary_1"
|
||||
},
|
||||
{
|
||||
"addr": "wss://relay.shhnowisnottheti.me/",
|
||||
"name": "ayunami relay #1",
|
||||
"primary": "$random_relay_primary_2"
|
||||
}
|
||||
],
|
||||
"mainMenu": {
|
||||
"splashes": [
|
||||
"Darviglet!",
|
||||
"eaglerenophile!",
|
||||
"You Eagler!",
|
||||
"Yeeeeeee!",
|
||||
"yeee",
|
||||
"EEEEEEEEE!",
|
||||
"You Darvig!",
|
||||
"You Vigg!",
|
||||
":>",
|
||||
"|>",
|
||||
"You Yumpster!"
|
||||
],
|
||||
"eaglerLogo": false,
|
||||
"itemLink": null,
|
||||
"itemLine0": null,
|
||||
"itemLine1": null,
|
||||
"itemLine2": null
|
||||
},
|
||||
"worldsFolder": "MAIN",
|
||||
"profanity": false,
|
||||
"hideDownServers": false,
|
||||
"serverListTitle": null,
|
||||
"serverListLink": null
|
||||
}
|
||||
{
|
||||
"joinServer": null,
|
||||
"servers": [
|
||||
{
|
||||
"serverName": "Local Test Server",
|
||||
"serverAddress": "localhost:25565",
|
||||
"hideAddress": false
|
||||
}
|
||||
],
|
||||
"relays": [
|
||||
{
|
||||
"addr": "wss://relay.deev.is/",
|
||||
"name": "lax1dude relay #1",
|
||||
"primary": "$random_relay_primary_0"
|
||||
},
|
||||
{
|
||||
"addr": "wss://relay.lax1dude.net/",
|
||||
"name": "lax1dude relay #2",
|
||||
"primary": "$random_relay_primary_1"
|
||||
},
|
||||
{
|
||||
"addr": "wss://relay.shhnowisnottheti.me/",
|
||||
"name": "ayunami relay #1",
|
||||
"primary": "$random_relay_primary_2"
|
||||
}
|
||||
],
|
||||
"mainMenu": {
|
||||
"splashes": [
|
||||
"Darviglet!",
|
||||
"eaglerenophile!",
|
||||
"You Eagler!",
|
||||
"Yeeeeeee!",
|
||||
"yeee",
|
||||
"EEEEEEEEE!",
|
||||
"You Darvig!",
|
||||
"You Vigg!",
|
||||
":>",
|
||||
"|>",
|
||||
"You Yumpster!"
|
||||
],
|
||||
"eaglerLogo": false,
|
||||
"itemLink": null,
|
||||
"itemLine0": null,
|
||||
"itemLine1": null,
|
||||
"itemLine2": null
|
||||
},
|
||||
"worldsFolder": "MAIN",
|
||||
"profanity": false,
|
||||
"hideDownServers": false,
|
||||
"serverListTitle": null,
|
||||
"serverListLink": null
|
||||
}
|
||||
|
@ -1,32 +1,32 @@
|
||||
[NBT]{
|
||||
servers: [
|
||||
{
|
||||
name: "Local Test Server",
|
||||
ip: "localhost:25565",
|
||||
hideAddress: false
|
||||
}
|
||||
],
|
||||
mainMenu: {
|
||||
itemLink: "",
|
||||
itemLine0: "",
|
||||
itemLine1: "",
|
||||
itemLine2: "",
|
||||
splashes: [
|
||||
"Darviglet!",
|
||||
"eaglerenophile!",
|
||||
"You Eagler!",
|
||||
"Yeeeeeee!",
|
||||
"yeee",
|
||||
"EEEEEEEEE!",
|
||||
"You Darvig!",
|
||||
"You Vigg!",
|
||||
":>",
|
||||
"|>",
|
||||
"You Yumpster!"
|
||||
]
|
||||
},
|
||||
profanity: false,
|
||||
hide_down: false,
|
||||
serverListTitle: "",
|
||||
serverListLink: ""
|
||||
}[/NBT]
|
||||
[NBT]{
|
||||
servers: [
|
||||
{
|
||||
name: "Local Test Server",
|
||||
ip: "localhost:25565",
|
||||
hideAddress: false
|
||||
}
|
||||
],
|
||||
mainMenu: {
|
||||
itemLink: "",
|
||||
itemLine0: "",
|
||||
itemLine1: "",
|
||||
itemLine2: "",
|
||||
splashes: [
|
||||
"Darviglet!",
|
||||
"eaglerenophile!",
|
||||
"You Eagler!",
|
||||
"Yeeeeeee!",
|
||||
"yeee",
|
||||
"EEEEEEEEE!",
|
||||
"You Darvig!",
|
||||
"You Vigg!",
|
||||
":>",
|
||||
"|>",
|
||||
"You Yumpster!"
|
||||
]
|
||||
},
|
||||
profanity: false,
|
||||
hide_down: false,
|
||||
serverListTitle: "",
|
||||
serverListLink: ""
|
||||
}[/NBT]
|
||||
|
@ -1,63 +1,63 @@
|
||||
{
|
||||
"joinServer": null,
|
||||
"servers": [
|
||||
{
|
||||
"serverName": "Local Test Server",
|
||||
"serverAddress": "localhost:25565",
|
||||
"hideAddress": false
|
||||
}
|
||||
],
|
||||
"relays": [
|
||||
{
|
||||
"addr": "wss://relay.deev.is/",
|
||||
"name": "lax1dude relay #1",
|
||||
"primary": "$random_relay_primary_0"
|
||||
},
|
||||
{
|
||||
"addr": "wss://relay.lax1dude.net/",
|
||||
"name": "lax1dude relay #2",
|
||||
"primary": "$random_relay_primary_1"
|
||||
},
|
||||
{
|
||||
"addr": "wss://relay.shhnowisnottheti.me/",
|
||||
"name": "ayunami relay #1",
|
||||
"primary": "$random_relay_primary_2"
|
||||
}
|
||||
],
|
||||
"mainMenu": {
|
||||
"splashes": [
|
||||
"Darviglet!",
|
||||
"eaglerenophile!",
|
||||
"You Eagler!",
|
||||
"Yeeeeeee!",
|
||||
"yeee",
|
||||
"EEEEEEEEE!",
|
||||
"You Darvig!",
|
||||
"You Vigg!",
|
||||
":>",
|
||||
"|>",
|
||||
"You Yumpster!"
|
||||
],
|
||||
"eaglerLogo": false,
|
||||
"itemLink": null,
|
||||
"itemLine0": null,
|
||||
"itemLine1": null,
|
||||
"itemLine2": null
|
||||
},
|
||||
"worldsFolder": "MAIN",
|
||||
"assetOverrides": {
|
||||
"title/no-pano-blur.flag": "false",
|
||||
"records/wait.mp3": "wait.mp3",
|
||||
"records/mellohi.mp3": "https://stream.nightride.fm/chillsynth.m4a",
|
||||
"records/far.mp3": "https://stream.nightride.fm/nightride.m4a",
|
||||
"records/cat.mp3": "http://usa9.fastcast4u.com/proxy/jamz?mp=/1",
|
||||
"records/ward.mp3": "http://fr4.1mix.co.uk:8000/192h",
|
||||
"records/strad.mp3": "http://listen.011fm.com:8028/stream15",
|
||||
"records/blocks.mp3": "https://www.ophanim.net:8444/s/9780",
|
||||
"records/13.mp3": "https://s2.radio.co/s2b2b68744/listen"
|
||||
},
|
||||
"profanity": false,
|
||||
"hideDownServers": false,
|
||||
"serverListTitle": null,
|
||||
"serverListLink": null
|
||||
}
|
||||
{
|
||||
"joinServer": null,
|
||||
"servers": [
|
||||
{
|
||||
"serverName": "Local Test Server",
|
||||
"serverAddress": "localhost:25565",
|
||||
"hideAddress": false
|
||||
}
|
||||
],
|
||||
"relays": [
|
||||
{
|
||||
"addr": "wss://relay.deev.is/",
|
||||
"name": "lax1dude relay #1",
|
||||
"primary": "$random_relay_primary_0"
|
||||
},
|
||||
{
|
||||
"addr": "wss://relay.lax1dude.net/",
|
||||
"name": "lax1dude relay #2",
|
||||
"primary": "$random_relay_primary_1"
|
||||
},
|
||||
{
|
||||
"addr": "wss://relay.shhnowisnottheti.me/",
|
||||
"name": "ayunami relay #1",
|
||||
"primary": "$random_relay_primary_2"
|
||||
}
|
||||
],
|
||||
"mainMenu": {
|
||||
"splashes": [
|
||||
"Darviglet!",
|
||||
"eaglerenophile!",
|
||||
"You Eagler!",
|
||||
"Yeeeeeee!",
|
||||
"yeee",
|
||||
"EEEEEEEEE!",
|
||||
"You Darvig!",
|
||||
"You Vigg!",
|
||||
":>",
|
||||
"|>",
|
||||
"You Yumpster!"
|
||||
],
|
||||
"eaglerLogo": false,
|
||||
"itemLink": null,
|
||||
"itemLine0": null,
|
||||
"itemLine1": null,
|
||||
"itemLine2": null
|
||||
},
|
||||
"worldsFolder": "MAIN",
|
||||
"assetOverrides": {
|
||||
"title/no-pano-blur.flag": "false",
|
||||
"records/wait.mp3": "wait.mp3",
|
||||
"records/mellohi.mp3": "https://stream.nightride.fm/chillsynth.m4a",
|
||||
"records/far.mp3": "https://stream.nightride.fm/nightride.m4a",
|
||||
"records/cat.mp3": "http://usa9.fastcast4u.com/proxy/jamz?mp=/1",
|
||||
"records/ward.mp3": "http://fr4.1mix.co.uk:8000/192h",
|
||||
"records/strad.mp3": "http://listen.011fm.com:8028/stream15",
|
||||
"records/blocks.mp3": "https://www.ophanim.net:8444/s/9780",
|
||||
"records/13.mp3": "https://s2.radio.co/s2b2b68744/listen"
|
||||
},
|
||||
"profanity": false,
|
||||
"hideDownServers": false,
|
||||
"serverListTitle": null,
|
||||
"serverListLink": null
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"dataBaseName": "_net_PeytonPlayz585_eaglercraft_Alpha_IndexedDBFilesystem_1_2_6",
|
||||
"playerUsername": null,
|
||||
"serverIP": null,
|
||||
"joinServerOnLaunch": null
|
||||
}
|
||||
{
|
||||
"dataBaseName": "_net_PeytonPlayz585_eaglercraft_Alpha_IndexedDBFilesystem_1_2_6",
|
||||
"playerUsername": null,
|
||||
"serverIP": null,
|
||||
"joinServerOnLaunch": null
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"dataBaseName": "_net_PeytonPlayz585_eaglercraft_beta_IndexedDBFilesystem_1_7_3",
|
||||
"playerUsername": null,
|
||||
"serverIP": null,
|
||||
"joinServerOnLaunch": null
|
||||
}
|
||||
{
|
||||
"dataBaseName": "_net_PeytonPlayz585_eaglercraft_beta_IndexedDBFilesystem_1_7_3",
|
||||
"playerUsername": null,
|
||||
"serverIP": null,
|
||||
"joinServerOnLaunch": null
|
||||
}
|
||||
|
Before Width: | Height: | Size: 917 B After Width: | Height: | Size: 627 B |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 4.5 KiB |
@ -1,32 +1,32 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
EAGLER_IN(vec2, v_texCoord2f)
|
||||
EAGLER_IN(vec4, v_color4f)
|
||||
|
||||
EAGLER_FRAG_OUT()
|
||||
|
||||
uniform sampler2D u_inputTexture;
|
||||
uniform vec4 u_colorBias4f;
|
||||
|
||||
void main() {
|
||||
EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D(u_inputTexture, v_texCoord2f) * v_color4f + u_colorBias4f;
|
||||
if(EAGLER_FRAG_COLOR.a < 0.004) {
|
||||
discard;
|
||||
}
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
EAGLER_IN(vec2, v_texCoord2f)
|
||||
EAGLER_IN(vec4, v_color4f)
|
||||
|
||||
EAGLER_FRAG_OUT()
|
||||
|
||||
uniform sampler2D u_inputTexture;
|
||||
uniform vec4 u_colorBias4f;
|
||||
|
||||
void main() {
|
||||
EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D(u_inputTexture, v_texCoord2f) * v_color4f + u_colorBias4f;
|
||||
if(EAGLER_FRAG_COLOR.a < 0.004) {
|
||||
discard;
|
||||
}
|
||||
}
|
||||
|
@ -1,50 +1,50 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
EAGLER_VSH_LAYOUT_BEGIN()
|
||||
EAGLER_IN(0, vec3, a_position3f)
|
||||
EAGLER_IN(1, vec2, c_position2i)
|
||||
EAGLER_IN(2, vec2, c_coords2i)
|
||||
EAGLER_IN(3, vec4, c_color4f)
|
||||
EAGLER_VSH_LAYOUT_END()
|
||||
|
||||
EAGLER_OUT(vec2, v_texCoord2f)
|
||||
EAGLER_OUT(vec4, v_color4f)
|
||||
|
||||
uniform mat4 u_matrixTransform;
|
||||
uniform vec2 u_charSize2f;
|
||||
uniform vec2 u_charCoordSize2f;
|
||||
uniform vec4 u_color4f;
|
||||
|
||||
void main() {
|
||||
v_color4f = c_color4f.bgra;
|
||||
float shadowBit = a_position3f.z;
|
||||
float boldBit = shadowBit >= 0.5 ? 1.0 : 0.0;
|
||||
shadowBit -= boldBit * 0.5;
|
||||
v_color4f.rgb *= (1.0 - shadowBit * 3.0);
|
||||
v_texCoord2f = (c_coords2i + a_position3f.xy) * u_charCoordSize2f;
|
||||
vec2 pos2d = c_position2i + vec2(shadowBit * 4.0);
|
||||
pos2d += a_position3f.xy * u_charSize2f;
|
||||
pos2d.x += boldBit;
|
||||
float italicBit = v_color4f.a >= 0.5 ? 2.0 : 0.0;
|
||||
v_color4f.a -= italicBit * 0.25;
|
||||
pos2d.x -= (a_position3f.y - 0.5) * italicBit;
|
||||
v_color4f.a *= 2.0;
|
||||
v_color4f *= u_color4f;
|
||||
EAGLER_VERT_POSITION = u_matrixTransform * vec4(pos2d, 0.0, 1.0);
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
EAGLER_VSH_LAYOUT_BEGIN()
|
||||
EAGLER_IN(0, vec3, a_position3f)
|
||||
EAGLER_IN(1, vec2, c_position2i)
|
||||
EAGLER_IN(2, vec2, c_coords2i)
|
||||
EAGLER_IN(3, vec4, c_color4f)
|
||||
EAGLER_VSH_LAYOUT_END()
|
||||
|
||||
EAGLER_OUT(vec2, v_texCoord2f)
|
||||
EAGLER_OUT(vec4, v_color4f)
|
||||
|
||||
uniform mat4 u_matrixTransform;
|
||||
uniform vec2 u_charSize2f;
|
||||
uniform vec2 u_charCoordSize2f;
|
||||
uniform vec4 u_color4f;
|
||||
|
||||
void main() {
|
||||
v_color4f = c_color4f.bgra;
|
||||
float shadowBit = a_position3f.z;
|
||||
float boldBit = shadowBit >= 0.5 ? 1.0 : 0.0;
|
||||
shadowBit -= boldBit * 0.5;
|
||||
v_color4f.rgb *= (1.0 - shadowBit * 3.0);
|
||||
v_texCoord2f = (c_coords2i + a_position3f.xy) * u_charCoordSize2f;
|
||||
vec2 pos2d = c_position2i + vec2(shadowBit * 4.0);
|
||||
pos2d += a_position3f.xy * u_charSize2f;
|
||||
pos2d.x += boldBit;
|
||||
float italicBit = v_color4f.a >= 0.5 ? 2.0 : 0.0;
|
||||
v_color4f.a -= italicBit * 0.25;
|
||||
pos2d.x -= (a_position3f.y - 0.5) * italicBit;
|
||||
v_color4f.a *= 2.0;
|
||||
v_color4f *= u_color4f;
|
||||
EAGLER_VERT_POSITION = u_matrixTransform * vec4(pos2d, 0.0, 1.0);
|
||||
}
|
||||
|
@ -1,31 +1,31 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
EAGLER_IN(vec2, v_texCoord2f)
|
||||
EAGLER_IN(vec4, v_color4f)
|
||||
|
||||
EAGLER_FRAG_OUT()
|
||||
|
||||
uniform sampler2D u_inputTexture;
|
||||
|
||||
void main() {
|
||||
EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D(u_inputTexture, v_texCoord2f) * v_color4f;
|
||||
if(EAGLER_FRAG_COLOR.a < 0.004) {
|
||||
discard;
|
||||
}
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
EAGLER_IN(vec2, v_texCoord2f)
|
||||
EAGLER_IN(vec4, v_color4f)
|
||||
|
||||
EAGLER_FRAG_OUT()
|
||||
|
||||
uniform sampler2D u_inputTexture;
|
||||
|
||||
void main() {
|
||||
EAGLER_FRAG_COLOR = EAGLER_TEXTURE_2D(u_inputTexture, v_texCoord2f) * v_color4f;
|
||||
if(EAGLER_FRAG_COLOR.a < 0.004) {
|
||||
discard;
|
||||
}
|
||||
}
|
||||
|
@ -1,55 +1,55 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
EAGLER_VSH_LAYOUT_BEGIN()
|
||||
EAGLER_IN(0, vec2, a_position2f)
|
||||
EAGLER_IN(1, vec3, p_position3f)
|
||||
EAGLER_IN(2, vec2, p_texCoords2i)
|
||||
EAGLER_IN(3, vec2, p_lightMap2f)
|
||||
EAGLER_IN(4, vec2, p_particleSize_texCoordsSize_2i)
|
||||
EAGLER_IN(5, vec4, p_color4f)
|
||||
EAGLER_VSH_LAYOUT_END()
|
||||
|
||||
EAGLER_OUT(vec2, v_texCoord2f)
|
||||
EAGLER_OUT(vec4, v_color4f)
|
||||
|
||||
uniform mat4 u_matrixTransform;
|
||||
uniform vec3 u_texCoordSize2f_particleSize1f;
|
||||
uniform vec3 u_transformParam_1_2_5_f;
|
||||
uniform vec2 u_transformParam_3_4_f;
|
||||
uniform vec4 u_color4f;
|
||||
|
||||
uniform sampler2D u_lightmapTexture;
|
||||
|
||||
void main() {
|
||||
v_color4f = u_color4f * p_color4f.bgra * EAGLER_TEXTURE_2D(u_lightmapTexture, p_lightMap2f);
|
||||
|
||||
vec2 tex2f = a_position2f * 0.5 + 0.5;
|
||||
tex2f.y = 1.0 - tex2f.y;
|
||||
tex2f = p_texCoords2i + tex2f * p_particleSize_texCoordsSize_2i.y;
|
||||
v_texCoord2f = tex2f * u_texCoordSize2f_particleSize1f.xy;
|
||||
|
||||
float particleSize = u_texCoordSize2f_particleSize1f.z * p_particleSize_texCoordsSize_2i.x;
|
||||
|
||||
vec3 pos3f = p_position3f;
|
||||
vec2 spos2f = a_position2f * particleSize;
|
||||
pos3f += u_transformParam_1_2_5_f * spos2f.xyy;
|
||||
pos3f.zx += u_transformParam_3_4_f * spos2f;
|
||||
|
||||
EAGLER_VERT_POSITION = u_matrixTransform * vec4(pos3f, 1.0);
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
EAGLER_VSH_LAYOUT_BEGIN()
|
||||
EAGLER_IN(0, vec2, a_position2f)
|
||||
EAGLER_IN(1, vec3, p_position3f)
|
||||
EAGLER_IN(2, vec2, p_texCoords2i)
|
||||
EAGLER_IN(3, vec2, p_lightMap2f)
|
||||
EAGLER_IN(4, vec2, p_particleSize_texCoordsSize_2i)
|
||||
EAGLER_IN(5, vec4, p_color4f)
|
||||
EAGLER_VSH_LAYOUT_END()
|
||||
|
||||
EAGLER_OUT(vec2, v_texCoord2f)
|
||||
EAGLER_OUT(vec4, v_color4f)
|
||||
|
||||
uniform mat4 u_matrixTransform;
|
||||
uniform vec3 u_texCoordSize2f_particleSize1f;
|
||||
uniform vec3 u_transformParam_1_2_5_f;
|
||||
uniform vec2 u_transformParam_3_4_f;
|
||||
uniform vec4 u_color4f;
|
||||
|
||||
uniform sampler2D u_lightmapTexture;
|
||||
|
||||
void main() {
|
||||
v_color4f = u_color4f * p_color4f.bgra * EAGLER_TEXTURE_2D(u_lightmapTexture, p_lightMap2f);
|
||||
|
||||
vec2 tex2f = a_position2f * 0.5 + 0.5;
|
||||
tex2f.y = 1.0 - tex2f.y;
|
||||
tex2f = p_texCoords2i + tex2f * p_particleSize_texCoordsSize_2i.y;
|
||||
v_texCoord2f = tex2f * u_texCoordSize2f_particleSize1f.xy;
|
||||
|
||||
float particleSize = u_texCoordSize2f_particleSize1f.z * p_particleSize_texCoordsSize_2i.x;
|
||||
|
||||
vec3 pos3f = p_position3f;
|
||||
vec2 spos2f = a_position2f * particleSize;
|
||||
pos3f += u_transformParam_1_2_5_f * spos2f.xyy;
|
||||
pos3f.zx += u_transformParam_3_4_f * spos2f;
|
||||
|
||||
EAGLER_VERT_POSITION = u_matrixTransform * vec4(pos3f, 1.0);
|
||||
}
|
||||
|
@ -1,199 +1,199 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#if defined(COMPILE_ENABLE_TEX_GEN) || defined(COMPILE_ENABLE_FOG)
|
||||
EAGLER_IN(vec4, v_position4f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
EAGLER_IN(vec2, v_texture2f)
|
||||
#endif
|
||||
|
||||
uniform vec4 u_color4f;
|
||||
|
||||
#ifdef COMPILE_BLEND_ADD
|
||||
uniform vec4 u_colorBlendSrc4f;
|
||||
uniform vec4 u_colorBlendAdd4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
EAGLER_IN(vec4, v_color4f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
EAGLER_IN(vec3, v_normal3f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
EAGLER_IN(vec2, v_lightmap2f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
uniform sampler2D u_samplerTexture;
|
||||
#if !defined(COMPILE_TEXTURE_ATTRIB) && !defined(COMPILE_ENABLE_TEX_GEN)
|
||||
uniform vec2 u_textureCoords01;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
uniform sampler2D u_samplerLightmap;
|
||||
#ifndef COMPILE_LIGHTMAP_ATTRIB
|
||||
uniform vec2 u_textureCoords02;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
uniform float u_alphaTestRef1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_MC_LIGHTING
|
||||
uniform int u_lightsEnabled1i;
|
||||
uniform vec4 u_lightsDirections4fv[4];
|
||||
uniform vec3 u_lightsAmbient3f;
|
||||
#ifndef COMPILE_NORMAL_ATTRIB
|
||||
uniform vec3 u_uniformNormal3f;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_FOG
|
||||
uniform vec4 u_fogParameters4f;
|
||||
uniform vec4 u_fogColor4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
EAGLER_IN(vec3, v_objectPosition3f)
|
||||
uniform ivec4 u_texGenPlane4i;
|
||||
uniform vec4 u_texGenS4f;
|
||||
uniform vec4 u_texGenT4f;
|
||||
uniform vec4 u_texGenR4f;
|
||||
uniform vec4 u_texGenQ4f;
|
||||
uniform mat4 u_textureMat4f01;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
|
||||
uniform vec2 u_textureAnisotropicFix;
|
||||
#endif
|
||||
|
||||
EAGLER_FRAG_OUT()
|
||||
|
||||
void main() {
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
vec4 color = v_color4f * u_color4f;
|
||||
#else
|
||||
vec4 color = u_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
vec4 tmpVec4 = vec4(v_objectPosition3f, 1.0);
|
||||
vec4 texGenVector;
|
||||
texGenVector.x = dot(u_texGenPlane4i.x == 1 ? v_position4f : tmpVec4, u_texGenS4f);
|
||||
texGenVector.y = dot(u_texGenPlane4i.y == 1 ? v_position4f : tmpVec4, u_texGenT4f);
|
||||
texGenVector.z = dot(u_texGenPlane4i.z == 1 ? v_position4f : tmpVec4, u_texGenR4f);
|
||||
texGenVector.w = dot(u_texGenPlane4i.w == 1 ? v_position4f : tmpVec4, u_texGenQ4f);
|
||||
#ifdef EAGLER_HAS_GLES_300
|
||||
texGenVector.xyz = mat4x3(
|
||||
u_textureMat4f01[0].xyw,
|
||||
u_textureMat4f01[1].xyw,
|
||||
u_textureMat4f01[2].xyw,
|
||||
u_textureMat4f01[3].xyw
|
||||
) * texGenVector;
|
||||
texGenVector.xy /= texGenVector.z;
|
||||
#else
|
||||
texGenVector = u_textureMat4f01 * texGenVector;
|
||||
texGenVector.xy /= texGenVector.w;
|
||||
#endif
|
||||
|
||||
color *= EAGLER_TEXTURE_2D(u_samplerTexture, texGenVector.xy);
|
||||
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
if(color.a < u_alphaTestRef1f) discard;
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
|
||||
// d3d11 doesn't support GL_NEAREST upscaling with anisotropic
|
||||
// filtering enabled, so it needs this stupid fix to 'work'
|
||||
vec2 uv = floor(v_texture2f * u_textureAnisotropicFix) + 0.5;
|
||||
color *= EAGLER_TEXTURE_2D(u_samplerTexture, uv / u_textureAnisotropicFix);
|
||||
#else
|
||||
color *= EAGLER_TEXTURE_2D(u_samplerTexture, v_texture2f);
|
||||
#endif
|
||||
#else
|
||||
color *= EAGLER_TEXTURE_2D(u_samplerTexture, u_textureCoords01);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
color *= EAGLER_TEXTURE_2D(u_samplerLightmap, v_lightmap2f);
|
||||
#else
|
||||
color *= EAGLER_TEXTURE_2D(u_samplerLightmap, u_textureCoords02);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_BLEND_ADD
|
||||
color = color * u_colorBlendSrc4f + u_colorBlendAdd4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
if(color.a < u_alphaTestRef1f) discard;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_MC_LIGHTING
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
vec3 normal = normalize(v_normal3f);
|
||||
#else
|
||||
vec3 normal = u_uniformNormal3f;
|
||||
#endif
|
||||
float diffuse = 0.0;
|
||||
vec4 light;
|
||||
#ifdef EAGLER_HAS_GLES_300
|
||||
for(int i = 0; i < u_lightsEnabled1i; ++i) {
|
||||
#else
|
||||
for(int i = 0; i < 4; ++i) {
|
||||
#endif
|
||||
light = u_lightsDirections4fv[i];
|
||||
diffuse += max(dot(light.xyz, normal), 0.0) * light.w;
|
||||
#ifndef EAGLER_HAS_GLES_300
|
||||
if(i + 1 >= u_lightsEnabled1i) {
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
color.rgb *= min(u_lightsAmbient3f + vec3(diffuse), 1.0);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_FOG
|
||||
vec3 fogPos = v_position4f.xyz / v_position4f.w;
|
||||
float dist = length(fogPos);
|
||||
float fogDensity = u_fogParameters4f.y;
|
||||
float fogStart = u_fogParameters4f.z;
|
||||
float fogEnd = u_fogParameters4f.w;
|
||||
float f = u_fogParameters4f.x > 0.0 ? 1.0 - exp(-fogDensity * dist) :
|
||||
(dist - fogStart) / (fogEnd - fogStart);
|
||||
color.rgb = mix(color.rgb, u_fogColor4f.rgb, clamp(f, 0.0, 1.0) * u_fogColor4f.a);
|
||||
#endif
|
||||
|
||||
EAGLER_FRAG_COLOR = color;
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#if defined(COMPILE_ENABLE_TEX_GEN) || defined(COMPILE_ENABLE_FOG)
|
||||
EAGLER_IN(vec4, v_position4f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
EAGLER_IN(vec2, v_texture2f)
|
||||
#endif
|
||||
|
||||
uniform vec4 u_color4f;
|
||||
|
||||
#ifdef COMPILE_BLEND_ADD
|
||||
uniform vec4 u_colorBlendSrc4f;
|
||||
uniform vec4 u_colorBlendAdd4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
EAGLER_IN(vec4, v_color4f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
EAGLER_IN(vec3, v_normal3f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
EAGLER_IN(vec2, v_lightmap2f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
uniform sampler2D u_samplerTexture;
|
||||
#if !defined(COMPILE_TEXTURE_ATTRIB) && !defined(COMPILE_ENABLE_TEX_GEN)
|
||||
uniform vec2 u_textureCoords01;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
uniform sampler2D u_samplerLightmap;
|
||||
#ifndef COMPILE_LIGHTMAP_ATTRIB
|
||||
uniform vec2 u_textureCoords02;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
uniform float u_alphaTestRef1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_MC_LIGHTING
|
||||
uniform int u_lightsEnabled1i;
|
||||
uniform vec4 u_lightsDirections4fv[4];
|
||||
uniform vec3 u_lightsAmbient3f;
|
||||
#ifndef COMPILE_NORMAL_ATTRIB
|
||||
uniform vec3 u_uniformNormal3f;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_FOG
|
||||
uniform vec4 u_fogParameters4f;
|
||||
uniform vec4 u_fogColor4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
EAGLER_IN(vec3, v_objectPosition3f)
|
||||
uniform ivec4 u_texGenPlane4i;
|
||||
uniform vec4 u_texGenS4f;
|
||||
uniform vec4 u_texGenT4f;
|
||||
uniform vec4 u_texGenR4f;
|
||||
uniform vec4 u_texGenQ4f;
|
||||
uniform mat4 u_textureMat4f01;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
|
||||
uniform vec2 u_textureAnisotropicFix;
|
||||
#endif
|
||||
|
||||
EAGLER_FRAG_OUT()
|
||||
|
||||
void main() {
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
vec4 color = v_color4f * u_color4f;
|
||||
#else
|
||||
vec4 color = u_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
vec4 tmpVec4 = vec4(v_objectPosition3f, 1.0);
|
||||
vec4 texGenVector;
|
||||
texGenVector.x = dot(u_texGenPlane4i.x == 1 ? v_position4f : tmpVec4, u_texGenS4f);
|
||||
texGenVector.y = dot(u_texGenPlane4i.y == 1 ? v_position4f : tmpVec4, u_texGenT4f);
|
||||
texGenVector.z = dot(u_texGenPlane4i.z == 1 ? v_position4f : tmpVec4, u_texGenR4f);
|
||||
texGenVector.w = dot(u_texGenPlane4i.w == 1 ? v_position4f : tmpVec4, u_texGenQ4f);
|
||||
#ifdef EAGLER_HAS_GLES_300
|
||||
texGenVector.xyz = mat4x3(
|
||||
u_textureMat4f01[0].xyw,
|
||||
u_textureMat4f01[1].xyw,
|
||||
u_textureMat4f01[2].xyw,
|
||||
u_textureMat4f01[3].xyw
|
||||
) * texGenVector;
|
||||
texGenVector.xy /= texGenVector.z;
|
||||
#else
|
||||
texGenVector = u_textureMat4f01 * texGenVector;
|
||||
texGenVector.xy /= texGenVector.w;
|
||||
#endif
|
||||
|
||||
color *= EAGLER_TEXTURE_2D(u_samplerTexture, texGenVector.xy);
|
||||
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
if(color.a < u_alphaTestRef1f) discard;
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
|
||||
// d3d11 doesn't support GL_NEAREST upscaling with anisotropic
|
||||
// filtering enabled, so it needs this stupid fix to 'work'
|
||||
vec2 uv = floor(v_texture2f * u_textureAnisotropicFix) + 0.5;
|
||||
color *= EAGLER_TEXTURE_2D(u_samplerTexture, uv / u_textureAnisotropicFix);
|
||||
#else
|
||||
color *= EAGLER_TEXTURE_2D(u_samplerTexture, v_texture2f);
|
||||
#endif
|
||||
#else
|
||||
color *= EAGLER_TEXTURE_2D(u_samplerTexture, u_textureCoords01);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
color *= EAGLER_TEXTURE_2D(u_samplerLightmap, v_lightmap2f);
|
||||
#else
|
||||
color *= EAGLER_TEXTURE_2D(u_samplerLightmap, u_textureCoords02);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_BLEND_ADD
|
||||
color = color * u_colorBlendSrc4f + u_colorBlendAdd4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
if(color.a < u_alphaTestRef1f) discard;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_MC_LIGHTING
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
vec3 normal = v_normal3f;
|
||||
#else
|
||||
vec3 normal = u_uniformNormal3f;
|
||||
#endif
|
||||
float diffuse = 0.0;
|
||||
vec4 light;
|
||||
#ifdef EAGLER_HAS_GLES_300
|
||||
for(int i = 0; i < u_lightsEnabled1i; ++i) {
|
||||
#else
|
||||
for(int i = 0; i < 4; ++i) {
|
||||
#endif
|
||||
light = u_lightsDirections4fv[i];
|
||||
diffuse += max(dot(light.xyz, normal), 0.0) * light.w;
|
||||
#ifndef EAGLER_HAS_GLES_300
|
||||
if(i + 1 >= u_lightsEnabled1i) {
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
color.rgb *= min(u_lightsAmbient3f + vec3(diffuse), 1.0);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_FOG
|
||||
vec3 fogPos = v_position4f.xyz / v_position4f.w;
|
||||
float dist = length(fogPos);
|
||||
float fogDensity = u_fogParameters4f.y;
|
||||
float fogStart = u_fogParameters4f.z;
|
||||
float fogEnd = u_fogParameters4f.w;
|
||||
float f = u_fogParameters4f.x > 0.0 ? 1.0 - exp(-fogDensity * dist) :
|
||||
(dist - fogStart) / (fogEnd - fogStart);
|
||||
color.rgb = mix(color.rgb, u_fogColor4f.rgb, clamp(f, 0.0, 1.0) * u_fogColor4f.a);
|
||||
#endif
|
||||
|
||||
EAGLER_FRAG_COLOR = color;
|
||||
}
|
||||
|
@ -1,99 +1,99 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
EAGLER_IN_AUTO(vec3, a_position3f)
|
||||
|
||||
#if defined(COMPILE_ENABLE_TEX_GEN) || defined(COMPILE_ENABLE_FOG)
|
||||
#define _COMPILE_VARYING_POSITION
|
||||
#endif
|
||||
|
||||
#ifdef _COMPILE_VARYING_POSITION
|
||||
EAGLER_OUT(vec4, v_position4f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
EAGLER_OUT(vec3, v_objectPosition3f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
EAGLER_IN_AUTO(vec2, a_texture2f)
|
||||
EAGLER_OUT(vec2, v_texture2f)
|
||||
uniform mat4 u_textureMat4f01;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
EAGLER_IN_AUTO(vec4, a_color4f)
|
||||
EAGLER_OUT(vec4, v_color4f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
EAGLER_IN_AUTO(vec4, a_normal4f)
|
||||
EAGLER_OUT(vec3, v_normal3f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
EAGLER_IN_AUTO(vec2, a_lightmap2f)
|
||||
EAGLER_OUT(vec2, v_lightmap2f)
|
||||
uniform mat4 u_textureMat4f02;
|
||||
#endif
|
||||
|
||||
#ifdef _COMPILE_VARYING_POSITION
|
||||
uniform mat4 u_modelviewMat4f;
|
||||
uniform mat4 u_projectionMat4f;
|
||||
#else
|
||||
uniform mat4 u_modelviewProjMat4f;
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
uniform mat4 u_modelviewMat4f;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
|
||||
|
||||
void main() {
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
v_objectPosition3f = a_position3f;
|
||||
#endif
|
||||
|
||||
#ifdef _COMPILE_VARYING_POSITION
|
||||
v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0);
|
||||
v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
v_color4f = a_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0);
|
||||
v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z;
|
||||
#endif
|
||||
|
||||
#ifdef _COMPILE_VARYING_POSITION
|
||||
EAGLER_VERT_POSITION = u_projectionMat4f * v_position4f;
|
||||
#else
|
||||
EAGLER_VERT_POSITION = u_modelviewProjMat4f * vec4(a_position3f, 1.0);
|
||||
#endif
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022-2024 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
EAGLER_IN_AUTO(vec3, a_position3f)
|
||||
|
||||
#if defined(COMPILE_ENABLE_TEX_GEN) || defined(COMPILE_ENABLE_FOG)
|
||||
#define _COMPILE_VARYING_POSITION
|
||||
#endif
|
||||
|
||||
#ifdef _COMPILE_VARYING_POSITION
|
||||
EAGLER_OUT(vec4, v_position4f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
EAGLER_OUT(vec3, v_objectPosition3f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
EAGLER_IN_AUTO(vec2, a_texture2f)
|
||||
EAGLER_OUT(vec2, v_texture2f)
|
||||
uniform mat4 u_textureMat4f01;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
EAGLER_IN_AUTO(vec4, a_color4f)
|
||||
EAGLER_OUT(vec4, v_color4f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
EAGLER_IN_AUTO(vec4, a_normal4f)
|
||||
EAGLER_OUT(vec3, v_normal3f)
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
EAGLER_IN_AUTO(vec2, a_lightmap2f)
|
||||
EAGLER_OUT(vec2, v_lightmap2f)
|
||||
uniform mat4 u_textureMat4f02;
|
||||
#endif
|
||||
|
||||
#ifdef _COMPILE_VARYING_POSITION
|
||||
uniform mat4 u_modelviewMat4f;
|
||||
uniform mat4 u_projectionMat4f;
|
||||
#else
|
||||
uniform mat4 u_modelviewProjMat4f;
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
uniform mat4 u_modelviewMat4f;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
|
||||
|
||||
void main() {
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
v_objectPosition3f = a_position3f;
|
||||
#endif
|
||||
|
||||
#ifdef _COMPILE_VARYING_POSITION
|
||||
v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0);
|
||||
v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
v_color4f = a_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0);
|
||||
v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z;
|
||||
#endif
|
||||
|
||||
#ifdef _COMPILE_VARYING_POSITION
|
||||
EAGLER_VERT_POSITION = u_projectionMat4f * v_position4f;
|
||||
#else
|
||||
EAGLER_VERT_POSITION = u_modelviewProjMat4f * vec4(a_position3f, 1.0);
|
||||
#endif
|
||||
}
|
||||
|
@ -1,72 +1,72 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision mediump sampler2D;
|
||||
|
||||
layout(location = 0) in vec2 a_position2f;
|
||||
|
||||
layout(location = 1) in vec3 p_position3f;
|
||||
layout(location = 2) in vec2 p_texCoords2i;
|
||||
layout(location = 3) in vec2 p_lightMap2f;
|
||||
layout(location = 4) in vec2 p_particleSize_texCoordsSize_2i;
|
||||
layout(location = 5) in vec4 p_color4f;
|
||||
|
||||
out vec2 v_texCoord2f;
|
||||
out vec4 v_color4f;
|
||||
out vec2 v_lightmap2f;
|
||||
|
||||
#ifdef COMPILE_FORWARD_VSH
|
||||
out vec4 v_position4f;
|
||||
uniform mat4 u_modelViewMatrix4f;
|
||||
uniform mat4 u_projectionMatrix4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_GBUFFER_VSH
|
||||
uniform mat4 u_matrixTransform;
|
||||
#endif
|
||||
|
||||
uniform vec3 u_texCoordSize2f_particleSize1f;
|
||||
uniform vec3 u_transformParam_1_2_5_f;
|
||||
uniform vec2 u_transformParam_3_4_f;
|
||||
|
||||
void main() {
|
||||
v_color4f = p_color4f.bgra;
|
||||
v_lightmap2f = p_lightMap2f;
|
||||
|
||||
vec2 tex2f = a_position2f * 0.5 + 0.5;
|
||||
tex2f.y = 1.0 - tex2f.y;
|
||||
tex2f = p_texCoords2i + tex2f * p_particleSize_texCoordsSize_2i.y;
|
||||
v_texCoord2f = tex2f * u_texCoordSize2f_particleSize1f.xy;
|
||||
|
||||
float particleSize = u_texCoordSize2f_particleSize1f.z * p_particleSize_texCoordsSize_2i.x;
|
||||
|
||||
vec3 pos3f = p_position3f;
|
||||
vec2 spos2f = a_position2f * particleSize;
|
||||
pos3f += u_transformParam_1_2_5_f * spos2f.xyy;
|
||||
pos3f.zx += u_transformParam_3_4_f * spos2f;
|
||||
|
||||
#ifdef COMPILE_GBUFFER_VSH
|
||||
gl_Position = u_matrixTransform * vec4(pos3f, 1.0);
|
||||
#endif
|
||||
#ifdef COMPILE_FORWARD_VSH
|
||||
v_position4f = u_modelViewMatrix4f * vec4(pos3f, 1.0);
|
||||
gl_Position = u_projectionMatrix4f * v_position4f;
|
||||
#endif
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision mediump sampler2D;
|
||||
|
||||
layout(location = 0) in vec2 a_position2f;
|
||||
|
||||
layout(location = 1) in vec3 p_position3f;
|
||||
layout(location = 2) in vec2 p_texCoords2i;
|
||||
layout(location = 3) in vec2 p_lightMap2f;
|
||||
layout(location = 4) in vec2 p_particleSize_texCoordsSize_2i;
|
||||
layout(location = 5) in vec4 p_color4f;
|
||||
|
||||
out vec2 v_texCoord2f;
|
||||
out vec4 v_color4f;
|
||||
out vec2 v_lightmap2f;
|
||||
|
||||
#ifdef COMPILE_FORWARD_VSH
|
||||
out vec4 v_position4f;
|
||||
uniform mat4 u_modelViewMatrix4f;
|
||||
uniform mat4 u_projectionMatrix4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_GBUFFER_VSH
|
||||
uniform mat4 u_matrixTransform;
|
||||
#endif
|
||||
|
||||
uniform vec3 u_texCoordSize2f_particleSize1f;
|
||||
uniform vec3 u_transformParam_1_2_5_f;
|
||||
uniform vec2 u_transformParam_3_4_f;
|
||||
|
||||
void main() {
|
||||
v_color4f = p_color4f.bgra;
|
||||
v_lightmap2f = p_lightMap2f;
|
||||
|
||||
vec2 tex2f = a_position2f * 0.5 + 0.5;
|
||||
tex2f.y = 1.0 - tex2f.y;
|
||||
tex2f = p_texCoords2i + tex2f * p_particleSize_texCoordsSize_2i.y;
|
||||
v_texCoord2f = tex2f * u_texCoordSize2f_particleSize1f.xy;
|
||||
|
||||
float particleSize = u_texCoordSize2f_particleSize1f.z * p_particleSize_texCoordsSize_2i.x;
|
||||
|
||||
vec3 pos3f = p_position3f;
|
||||
vec2 spos2f = a_position2f * particleSize;
|
||||
pos3f += u_transformParam_1_2_5_f * spos2f.xyy;
|
||||
pos3f.zx += u_transformParam_3_4_f * spos2f;
|
||||
|
||||
#ifdef COMPILE_GBUFFER_VSH
|
||||
gl_Position = u_matrixTransform * vec4(pos3f, 1.0);
|
||||
#endif
|
||||
#ifdef COMPILE_FORWARD_VSH
|
||||
v_position4f = u_modelViewMatrix4f * vec4(pos3f, 1.0);
|
||||
gl_Position = u_projectionMatrix4f * v_position4f;
|
||||
#endif
|
||||
}
|
||||
|
@ -1,235 +1,235 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision mediump sampler2D;
|
||||
precision highp sampler2DShadow;
|
||||
|
||||
in vec4 v_position4f;
|
||||
in vec2 v_texCoord2f;
|
||||
in vec4 v_color4f;
|
||||
in vec2 v_lightmap2f;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
uniform sampler2D u_diffuseTexture;
|
||||
|
||||
uniform vec2 u_textureYScale2f;
|
||||
|
||||
uniform mat4 u_inverseViewMatrix4f;
|
||||
|
||||
#ifdef COMPILE_DYNAMIC_LIGHTS
|
||||
struct DynamicLight {
|
||||
mediump vec4 u_lightPosition4f;
|
||||
mediump vec4 u_lightColor4f;
|
||||
};
|
||||
layout(std140) uniform u_chunkLightingData {
|
||||
mediump int u_dynamicLightCount1i;
|
||||
mediump int _paddingA_;
|
||||
mediump int _paddingB_;
|
||||
mediump int _paddingC_;
|
||||
DynamicLight u_dynamicLightArray[12];
|
||||
};
|
||||
#endif
|
||||
|
||||
layout(std140) uniform u_worldLightingData {
|
||||
mediump vec4 u_sunDirection4f;
|
||||
mediump vec4 u_sunColor3f_sky1f;
|
||||
mediump vec4 u_fogParameters4f;
|
||||
mediump vec4 u_fogColorLight4f;
|
||||
mediump vec4 u_fogColorDark4f;
|
||||
mediump vec4 u_fogColorAddSun4f;
|
||||
mediump vec4 u_blockSkySunDynamicLightFac4f;
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD0
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 1.0
|
||||
#endif
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD1
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
mediump mat4 u_sunShadowMatrixLOD14f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 0.5
|
||||
#endif
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD2
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
mediump mat4 u_sunShadowMatrixLOD14f;
|
||||
mediump mat4 u_sunShadowMatrixLOD24f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 0.3333333
|
||||
#endif
|
||||
};
|
||||
|
||||
uniform sampler2D u_samplerNormalMaterial;
|
||||
|
||||
uniform sampler2D u_metalsLUT;
|
||||
|
||||
#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION
|
||||
#define LIB_INCLUDE_PBR_LIGHTING_PREFETCH
|
||||
#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl"
|
||||
|
||||
uniform sampler2D u_irradianceMap;
|
||||
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
uniform sampler2DShadow u_sunShadowDepthTexture;
|
||||
#endif
|
||||
|
||||
void main() {
|
||||
vec4 worldPosition4f;
|
||||
vec4 worldDirection4f;
|
||||
vec4 diffuseColor4f;
|
||||
vec3 normalVector3f;
|
||||
vec2 lightmapCoords2f;
|
||||
vec3 materialData3f;
|
||||
|
||||
// =========== RESOLVE CONSTANTS ============ //
|
||||
|
||||
worldPosition4f = u_inverseViewMatrix4f * v_position4f;
|
||||
worldPosition4f.xyz /= worldPosition4f.w;
|
||||
worldPosition4f.w = 1.0;
|
||||
worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0);
|
||||
worldDirection4f.xyz = normalize(worldDirection4f.xyz);
|
||||
|
||||
lightmapCoords2f = v_lightmap2f;
|
||||
|
||||
normalVector3f = normalize(u_inverseViewMatrix4f[2].xyz);
|
||||
|
||||
// ========= CALCULATE DIFFUSE COLOR ========== //
|
||||
|
||||
diffuseColor4f = texture(u_diffuseTexture, v_texCoord2f) * v_color4f;
|
||||
|
||||
// ============= ALPHA TEST ============== //
|
||||
|
||||
if(diffuseColor4f.a < 0.004) discard;
|
||||
|
||||
// ========== RESOLVE MATERIALS =========== //
|
||||
|
||||
materialData3f = texture(u_samplerNormalMaterial, vec2(v_texCoord2f.x, v_texCoord2f.y * u_textureYScale2f.x + u_textureYScale2f.y)).rgb;
|
||||
|
||||
vec3 metalN, metalK;
|
||||
PREFETCH_METALS(diffuseColor4f.rgb, materialData3f.g, metalN, metalK)
|
||||
|
||||
// ============ SUN LIGHTING ============== //
|
||||
|
||||
diffuseColor4f.rgb *= diffuseColor4f.rgb;
|
||||
|
||||
vec3 lightColor3f = vec3(0.0);
|
||||
if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 &&
|
||||
(u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) {
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
|
||||
// ========== SUN SHADOW: LOD0 ============ //
|
||||
|
||||
float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
|
||||
float shadowSample = 1.0;
|
||||
vec4 shadowWorldPos4f = worldPosition4f;
|
||||
shadowWorldPos4f.xyz += normalVector3f * 0.05;
|
||||
|
||||
vec4 shadowTexPos4f;
|
||||
vec2 tmpVec2;
|
||||
for(;;) {
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0);
|
||||
break;
|
||||
}
|
||||
|
||||
#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2)
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 1.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD2
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 2.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
lightColor3f *= shadowSample * skyLight;
|
||||
#endif
|
||||
vec3 normalWrap3f = normalVector3f * (dot(-worldDirection4f.xyz, normalVector3f) < 0.0 ? -1.0 : 1.0);
|
||||
lightColor3f = eaglercraftLighting(diffuseColor4f.rgb, lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalWrap3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.z;
|
||||
}
|
||||
|
||||
// =========== IRRADIANCE MAP =========== //
|
||||
|
||||
lightmapCoords2f *= lightmapCoords2f;
|
||||
|
||||
vec3 irradianceMapSamplePos2f = normalVector3f;
|
||||
irradianceMapSamplePos2f.xz /= abs(irradianceMapSamplePos2f.y) + 1.0;
|
||||
float dst = 1.0 - dot(irradianceMapSamplePos2f.xz, irradianceMapSamplePos2f.xz);
|
||||
dst *= dst;
|
||||
irradianceMapSamplePos2f.xz *= 0.975;
|
||||
vec3 skyLight = vec3(sqrt(0.01 + max(u_sunDirection4f.w, 0.0)));
|
||||
if(dst < 0.005) {
|
||||
vec4 sample1 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
|
||||
vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb;
|
||||
}else {
|
||||
irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25);
|
||||
irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75);
|
||||
skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb;
|
||||
}
|
||||
skyLight *= lightmapCoords2f.g * u_sunColor3f_sky1f.w;
|
||||
|
||||
#ifdef COMPILE_DYNAMIC_LIGHTS
|
||||
|
||||
// =========== DYNAMIC LIGHTING =========== //
|
||||
|
||||
vec3 dlightDist3f, dlightDir3f, dlightColor3f;
|
||||
int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this
|
||||
for(int i = 0; i < safeLightCount; ++i) {
|
||||
dlightDist3f = worldPosition4f.xyz - u_dynamicLightArray[i].u_lightPosition4f.xyz;
|
||||
dlightDir3f = normalize(dlightDist3f);
|
||||
dlightDir3f = dlightDir3f * (dot(dlightDir3f, normalVector3f) < 0.0 ? 1.0 : -1.0);
|
||||
dlightDir3f = materialData3f.b == 1.0 ? normalVector3f : -dlightDir3f;
|
||||
if(dot(dlightDir3f, normalVector3f) <= 0.0) {
|
||||
continue;
|
||||
}
|
||||
dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f);
|
||||
if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) {
|
||||
continue;
|
||||
}
|
||||
lightColor3f += eaglercraftLighting(diffuseColor4f.rgb, dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.w;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// ============ OUTPUT COLOR ============== //
|
||||
|
||||
vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0 * u_blockSkySunDynamicLightFac4f.x;
|
||||
skyLight *= u_blockSkySunDynamicLightFac4f.y;
|
||||
float emissive = materialData3f.b == 1.0 ? 0.0 : materialData3f.b;
|
||||
diffuseColor4f.rgb *= max(skyLight + blockLight, vec3(emissive * emissive * 20.0 + 0.075)) * 0.075;
|
||||
diffuseColor4f.rgb += lightColor3f;
|
||||
|
||||
output4f = vec4(diffuseColor4f.rgb * diffuseColor4f.a, diffuseColor4f.a);
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision mediump sampler2D;
|
||||
precision highp sampler2DShadow;
|
||||
|
||||
in vec4 v_position4f;
|
||||
in vec2 v_texCoord2f;
|
||||
in vec4 v_color4f;
|
||||
in vec2 v_lightmap2f;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
uniform sampler2D u_diffuseTexture;
|
||||
|
||||
uniform vec2 u_textureYScale2f;
|
||||
|
||||
uniform mat4 u_inverseViewMatrix4f;
|
||||
|
||||
#ifdef COMPILE_DYNAMIC_LIGHTS
|
||||
struct DynamicLight {
|
||||
mediump vec4 u_lightPosition4f;
|
||||
mediump vec4 u_lightColor4f;
|
||||
};
|
||||
layout(std140) uniform u_chunkLightingData {
|
||||
mediump int u_dynamicLightCount1i;
|
||||
mediump int _paddingA_;
|
||||
mediump int _paddingB_;
|
||||
mediump int _paddingC_;
|
||||
DynamicLight u_dynamicLightArray[12];
|
||||
};
|
||||
#endif
|
||||
|
||||
layout(std140) uniform u_worldLightingData {
|
||||
mediump vec4 u_sunDirection4f;
|
||||
mediump vec4 u_sunColor3f_sky1f;
|
||||
mediump vec4 u_fogParameters4f;
|
||||
mediump vec4 u_fogColorLight4f;
|
||||
mediump vec4 u_fogColorDark4f;
|
||||
mediump vec4 u_fogColorAddSun4f;
|
||||
mediump vec4 u_blockSkySunDynamicLightFac4f;
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD0
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 1.0
|
||||
#endif
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD1
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
mediump mat4 u_sunShadowMatrixLOD14f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 0.5
|
||||
#endif
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD2
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
mediump mat4 u_sunShadowMatrixLOD14f;
|
||||
mediump mat4 u_sunShadowMatrixLOD24f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 0.3333333
|
||||
#endif
|
||||
};
|
||||
|
||||
uniform sampler2D u_samplerNormalMaterial;
|
||||
|
||||
uniform sampler2D u_metalsLUT;
|
||||
|
||||
#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION
|
||||
#define LIB_INCLUDE_PBR_LIGHTING_PREFETCH
|
||||
#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl"
|
||||
|
||||
uniform sampler2D u_irradianceMap;
|
||||
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
uniform sampler2DShadow u_sunShadowDepthTexture;
|
||||
#endif
|
||||
|
||||
void main() {
|
||||
vec4 worldPosition4f;
|
||||
vec4 worldDirection4f;
|
||||
vec4 diffuseColor4f;
|
||||
vec3 normalVector3f;
|
||||
vec2 lightmapCoords2f;
|
||||
vec3 materialData3f;
|
||||
|
||||
// =========== RESOLVE CONSTANTS ============ //
|
||||
|
||||
worldPosition4f = u_inverseViewMatrix4f * v_position4f;
|
||||
worldPosition4f.xyz /= worldPosition4f.w;
|
||||
worldPosition4f.w = 1.0;
|
||||
worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0);
|
||||
worldDirection4f.xyz = normalize(worldDirection4f.xyz);
|
||||
|
||||
lightmapCoords2f = v_lightmap2f;
|
||||
|
||||
normalVector3f = normalize(u_inverseViewMatrix4f[2].xyz);
|
||||
|
||||
// ========= CALCULATE DIFFUSE COLOR ========== //
|
||||
|
||||
diffuseColor4f = texture(u_diffuseTexture, v_texCoord2f) * v_color4f;
|
||||
|
||||
// ============= ALPHA TEST ============== //
|
||||
|
||||
if(diffuseColor4f.a < 0.004) discard;
|
||||
|
||||
// ========== RESOLVE MATERIALS =========== //
|
||||
|
||||
materialData3f = texture(u_samplerNormalMaterial, vec2(v_texCoord2f.x, v_texCoord2f.y * u_textureYScale2f.x + u_textureYScale2f.y)).rgb;
|
||||
|
||||
vec3 metalN, metalK;
|
||||
PREFETCH_METALS(diffuseColor4f.rgb, materialData3f.g, metalN, metalK)
|
||||
|
||||
// ============ SUN LIGHTING ============== //
|
||||
|
||||
diffuseColor4f.rgb *= diffuseColor4f.rgb;
|
||||
|
||||
vec3 lightColor3f = vec3(0.0);
|
||||
if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 &&
|
||||
(u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) {
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
|
||||
// ========== SUN SHADOW: LOD0 ============ //
|
||||
|
||||
float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
|
||||
float shadowSample = 1.0;
|
||||
vec4 shadowWorldPos4f = worldPosition4f;
|
||||
shadowWorldPos4f.xyz += normalVector3f * 0.05;
|
||||
|
||||
vec4 shadowTexPos4f;
|
||||
vec2 tmpVec2;
|
||||
for(;;) {
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0);
|
||||
break;
|
||||
}
|
||||
|
||||
#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2)
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 1.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD2
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 2.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
lightColor3f *= shadowSample * skyLight;
|
||||
#endif
|
||||
vec3 normalWrap3f = normalVector3f * (dot(-worldDirection4f.xyz, normalVector3f) < 0.0 ? -1.0 : 1.0);
|
||||
lightColor3f = eaglercraftLighting(diffuseColor4f.rgb, lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalWrap3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.z;
|
||||
}
|
||||
|
||||
// =========== IRRADIANCE MAP =========== //
|
||||
|
||||
lightmapCoords2f *= lightmapCoords2f;
|
||||
|
||||
vec3 irradianceMapSamplePos2f = normalVector3f;
|
||||
irradianceMapSamplePos2f.xz /= abs(irradianceMapSamplePos2f.y) + 1.0;
|
||||
float dst = 1.0 - dot(irradianceMapSamplePos2f.xz, irradianceMapSamplePos2f.xz);
|
||||
dst *= dst;
|
||||
irradianceMapSamplePos2f.xz *= 0.975;
|
||||
vec3 skyLight = vec3(sqrt(0.01 + max(u_sunDirection4f.w, 0.0)));
|
||||
if(dst < 0.005) {
|
||||
vec4 sample1 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
|
||||
vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb;
|
||||
}else {
|
||||
irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25);
|
||||
irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75);
|
||||
skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb;
|
||||
}
|
||||
skyLight *= lightmapCoords2f.g * u_sunColor3f_sky1f.w;
|
||||
|
||||
#ifdef COMPILE_DYNAMIC_LIGHTS
|
||||
|
||||
// =========== DYNAMIC LIGHTING =========== //
|
||||
|
||||
vec3 dlightDist3f, dlightDir3f, dlightColor3f;
|
||||
int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this
|
||||
for(int i = 0; i < safeLightCount; ++i) {
|
||||
dlightDist3f = worldPosition4f.xyz - u_dynamicLightArray[i].u_lightPosition4f.xyz;
|
||||
dlightDir3f = normalize(dlightDist3f);
|
||||
dlightDir3f = dlightDir3f * (dot(dlightDir3f, normalVector3f) < 0.0 ? 1.0 : -1.0);
|
||||
dlightDir3f = materialData3f.b == 1.0 ? normalVector3f : -dlightDir3f;
|
||||
if(dot(dlightDir3f, normalVector3f) <= 0.0) {
|
||||
continue;
|
||||
}
|
||||
dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f);
|
||||
if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) {
|
||||
continue;
|
||||
}
|
||||
lightColor3f += eaglercraftLighting(diffuseColor4f.rgb, dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.w;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// ============ OUTPUT COLOR ============== //
|
||||
|
||||
vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0 * u_blockSkySunDynamicLightFac4f.x;
|
||||
skyLight *= u_blockSkySunDynamicLightFac4f.y;
|
||||
float emissive = materialData3f.b == 1.0 ? 0.0 : materialData3f.b;
|
||||
diffuseColor4f.rgb *= max(skyLight + blockLight, vec3(emissive * emissive * 20.0 + 0.075)) * 0.075;
|
||||
diffuseColor4f.rgb += lightColor3f;
|
||||
|
||||
output4f = vec4(diffuseColor4f.rgb * diffuseColor4f.a, diffuseColor4f.a);
|
||||
}
|
||||
|
@ -1,44 +1,44 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision mediump float;
|
||||
precision mediump sampler2D;
|
||||
|
||||
in vec2 v_texCoord2f;
|
||||
in vec4 v_color4f;
|
||||
in vec2 v_lightmap2f;
|
||||
|
||||
layout(location = 0) out vec4 gbufferColor4f;
|
||||
layout(location = 1) out vec4 gbufferNormal4f;
|
||||
layout(location = 2) out vec4 gbufferMaterial4f;
|
||||
|
||||
uniform sampler2D u_diffuseTexture;
|
||||
uniform sampler2D u_samplerNormalMaterial;
|
||||
|
||||
uniform vec2 u_textureYScale2f;
|
||||
|
||||
void main() {
|
||||
vec4 diffuseRGBA = texture(u_diffuseTexture, v_texCoord2f) * v_color4f;
|
||||
if(diffuseRGBA.a < 0.004) {
|
||||
discard;
|
||||
}
|
||||
gbufferColor4f = vec4(diffuseRGBA.rgb, v_lightmap2f.r);
|
||||
gbufferNormal4f = vec4(0.5, 0.5, 1.0, v_lightmap2f.g);
|
||||
gbufferMaterial4f = vec4(texture(u_samplerNormalMaterial, vec2(v_texCoord2f.x, v_texCoord2f.y * u_textureYScale2f.x + u_textureYScale2f.y)).rgb, 1.0);
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision mediump float;
|
||||
precision mediump sampler2D;
|
||||
|
||||
in vec2 v_texCoord2f;
|
||||
in vec4 v_color4f;
|
||||
in vec2 v_lightmap2f;
|
||||
|
||||
layout(location = 0) out vec4 gbufferColor4f;
|
||||
layout(location = 1) out vec4 gbufferNormal4f;
|
||||
layout(location = 2) out vec4 gbufferMaterial4f;
|
||||
|
||||
uniform sampler2D u_diffuseTexture;
|
||||
uniform sampler2D u_samplerNormalMaterial;
|
||||
|
||||
uniform vec2 u_textureYScale2f;
|
||||
|
||||
void main() {
|
||||
vec4 diffuseRGBA = texture(u_diffuseTexture, v_texCoord2f) * v_color4f;
|
||||
if(diffuseRGBA.a < 0.004) {
|
||||
discard;
|
||||
}
|
||||
gbufferColor4f = vec4(diffuseRGBA.rgb, v_lightmap2f.r);
|
||||
gbufferNormal4f = vec4(0.5, 0.5, 1.0, v_lightmap2f.g);
|
||||
gbufferMaterial4f = vec4(texture(u_samplerNormalMaterial, vec2(v_texCoord2f.x, v_texCoord2f.y * u_textureYScale2f.x + u_textureYScale2f.y)).rgb, 1.0);
|
||||
}
|
||||
|
@ -1 +1 @@
|
||||
these are just low quality fallback material textures for the default vanilla resource pack when no PBR resource pack is loaded, if you would like to make a PBR resource pack put your _n and _s textures in the "/assets/minecraft/textures/" directory of your zip file, do not modify any files within "/assets/eagler/glsl/deferred/assets_pbr/textures/" because they will not be recognized
|
||||
these are just low quality fallback material textures for the default vanilla resource pack when no PBR resource pack is loaded, if you would like to make a PBR resource pack put your _n and _s textures in the "/assets/minecraft/textures/" directory of your zip file, do not modify any files within "/assets/eagler/glsl/deferred/assets_pbr/textures/" because they will not be recognized
|
||||
|
@ -1,57 +1,57 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision highp sampler2D;
|
||||
|
||||
in vec2 v_position2f;
|
||||
|
||||
layout(location = 0) out float output1f;
|
||||
|
||||
uniform sampler2D u_noiseTexture;
|
||||
|
||||
uniform float u_textureSlice1f;
|
||||
uniform vec2 u_textureSize2f;
|
||||
uniform mat4x3 u_sampleOffsetMatrix4f;
|
||||
uniform vec3 u_cloudMovement3f;
|
||||
|
||||
#define GET_CLOUDS(pos3f, accum, factor, tmp3f)\
|
||||
tmp3f.z = floor(pos3f.z);\
|
||||
tmp3f.xy = pos3f.xy * 0.015625 + (tmp3f.z * 0.265625);\
|
||||
pos3f.x = textureLod(u_noiseTexture, tmp3f.xy, 0.0).x;\
|
||||
pos3f.y = textureLod(u_noiseTexture, tmp3f.xy + 0.265625, 0.0).x;\
|
||||
accum += mix(pos3f.x, pos3f.y, pos3f.z - tmp3f.z) * factor;
|
||||
|
||||
void main() {
|
||||
vec3 p = vec3(v_position2f.x, u_textureSlice1f, v_position2f.y) * vec3(u_textureSize2f.x, 1.0, u_textureSize2f.y);
|
||||
p = u_sampleOffsetMatrix4f * vec4(p, 1.0);
|
||||
vec3 sampleCoord3f = p + u_cloudMovement3f;
|
||||
float noise = 0.0;
|
||||
|
||||
vec3 in3f = sampleCoord3f;
|
||||
GET_CLOUDS(in3f, noise, 0.5, p)
|
||||
in3f = sampleCoord3f * 2.0 + u_cloudMovement3f;
|
||||
GET_CLOUDS(in3f, noise, 0.25, p)
|
||||
in3f = sampleCoord3f * 7.0 - u_cloudMovement3f;
|
||||
GET_CLOUDS(in3f, noise, 0.125, p)
|
||||
in3f = (sampleCoord3f + u_cloudMovement3f) * 16.0;
|
||||
GET_CLOUDS(in3f, noise, 0.0625, p)
|
||||
|
||||
output1f = noise;
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision highp sampler2D;
|
||||
|
||||
in vec2 v_position2f;
|
||||
|
||||
layout(location = 0) out float output1f;
|
||||
|
||||
uniform sampler2D u_noiseTexture;
|
||||
|
||||
uniform float u_textureSlice1f;
|
||||
uniform vec2 u_textureSize2f;
|
||||
uniform mat4x3 u_sampleOffsetMatrix4f;
|
||||
uniform vec3 u_cloudMovement3f;
|
||||
|
||||
#define GET_CLOUDS(pos3f, accum, factor, tmp3f)\
|
||||
tmp3f.z = floor(pos3f.z);\
|
||||
tmp3f.xy = pos3f.xy * 0.015625 + (tmp3f.z * 0.265625);\
|
||||
pos3f.x = textureLod(u_noiseTexture, tmp3f.xy, 0.0).x;\
|
||||
pos3f.y = textureLod(u_noiseTexture, tmp3f.xy + 0.265625, 0.0).x;\
|
||||
accum += mix(pos3f.x, pos3f.y, pos3f.z - tmp3f.z) * factor;
|
||||
|
||||
void main() {
|
||||
vec3 p = vec3(v_position2f.x, u_textureSlice1f, v_position2f.y) * vec3(u_textureSize2f.x, 1.0, u_textureSize2f.y);
|
||||
p = u_sampleOffsetMatrix4f * vec4(p, 1.0);
|
||||
vec3 sampleCoord3f = p + u_cloudMovement3f;
|
||||
float noise = 0.0;
|
||||
|
||||
vec3 in3f = sampleCoord3f;
|
||||
GET_CLOUDS(in3f, noise, 0.5, p)
|
||||
in3f = sampleCoord3f * 2.0 + u_cloudMovement3f;
|
||||
GET_CLOUDS(in3f, noise, 0.25, p)
|
||||
in3f = sampleCoord3f * 7.0 - u_cloudMovement3f;
|
||||
GET_CLOUDS(in3f, noise, 0.125, p)
|
||||
in3f = (sampleCoord3f + u_cloudMovement3f) * 16.0;
|
||||
GET_CLOUDS(in3f, noise, 0.0625, p)
|
||||
|
||||
output1f = noise;
|
||||
}
|
||||
|
@ -1,94 +1,94 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision highp sampler2D;
|
||||
precision highp sampler3D;
|
||||
|
||||
in vec2 v_position2f;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
uniform float u_rainStrength1f;
|
||||
uniform vec4 u_densityModifier4f;
|
||||
uniform float u_sampleStep1f;
|
||||
uniform float u_cloudTimer1f;
|
||||
uniform vec3 u_cloudOffset3f;
|
||||
uniform vec3 u_sunDirection3f;
|
||||
uniform vec3 u_sunColor3f;
|
||||
|
||||
uniform sampler3D u_noiseTexture3D;
|
||||
uniform sampler2D u_skyIrradianceMap;
|
||||
#define GET_CLOUDS(pos3f, out1f)\
|
||||
if(pos3f == clamp(pos3f, vec3(0.0), vec3(1.0))) {\
|
||||
out1f = length(pos3f - clamp(pos3f, vec3(0.05), vec3(0.95)));\
|
||||
out1f = smoothstep(0.0, 1.0, max(1.0 - out1f * 15.0, 0.0));\
|
||||
out1f *= textureLod(u_noiseTexture3D, pos3f.xzy, 0.0).r;\
|
||||
out1f += u_densityModifier4f.w;\
|
||||
out1f = max(out1f * out1f * u_densityModifier4f.x + out1f * u_densityModifier4f.y + u_densityModifier4f.z, 0.0);\
|
||||
}else out1f = 0.0;
|
||||
|
||||
void main() {
|
||||
vec2 latLong = v_position2f * 2.0 - 1.0;
|
||||
float latLongLen = dot(latLong, latLong);
|
||||
if(latLongLen > 1.025) {
|
||||
output4f = vec4(0.0);
|
||||
return;
|
||||
}
|
||||
|
||||
float mag2 = 2.0 / (latLongLen + 1.0);
|
||||
vec3 dir;
|
||||
dir.y = mag2 - 1.0;
|
||||
dir.xz = latLong * mag2;
|
||||
|
||||
vec3 samplePos = vec3(0.0, -4.5 + u_cloudOffset3f.y * 0.05, 0.0) + dir * u_sampleStep1f * 0.2;
|
||||
samplePos = samplePos * vec3(0.05, 0.1, 0.05) + vec3(0.5, 0.0, 0.5);
|
||||
|
||||
float sample0, sample1;
|
||||
GET_CLOUDS(samplePos, sample0)
|
||||
|
||||
if(sample0 < 0.002) {
|
||||
output4f = vec4(0.0, 0.0, 0.0, 1.0);
|
||||
return;
|
||||
}
|
||||
|
||||
output4f.a = exp2(-sample0 * 5.0);
|
||||
|
||||
vec3 sunDirection = u_sunDirection3f * vec3(1.0, 2.0, 1.0) * 0.025;
|
||||
float sunVisibility = sample0;
|
||||
|
||||
GET_CLOUDS((samplePos + sunDirection), sample1)
|
||||
sunVisibility += sample1;
|
||||
GET_CLOUDS((samplePos + sunDirection * 2.0), sample1)
|
||||
sunVisibility += sample1;
|
||||
GET_CLOUDS((samplePos + sunDirection * 3.0), sample1)
|
||||
sunVisibility += sample1;
|
||||
GET_CLOUDS((samplePos + sunDirection * 4.0), sample1)
|
||||
sunVisibility += sample1;
|
||||
GET_CLOUDS((samplePos + sunDirection * 5.0), sample1)
|
||||
sunVisibility += sample1;
|
||||
|
||||
sunVisibility = exp2(-sunVisibility * 50.0);
|
||||
sunVisibility *= 1.0 - exp2(-sample0 * 1.2);
|
||||
|
||||
vec3 sky = textureLod(u_skyIrradianceMap, v_position2f * vec2(1.0, 0.5) + vec2(0.0, 0.5), 0.0).rgb * 0.05;
|
||||
float intergal = exp2(-7.33 * sample0) * -9.0 + 9.0;
|
||||
|
||||
output4f.rgb = (u_sunColor3f * sunVisibility + sky) * intergal;
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision highp sampler2D;
|
||||
precision highp sampler3D;
|
||||
|
||||
in vec2 v_position2f;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
uniform float u_rainStrength1f;
|
||||
uniform vec4 u_densityModifier4f;
|
||||
uniform float u_sampleStep1f;
|
||||
uniform float u_cloudTimer1f;
|
||||
uniform vec3 u_cloudOffset3f;
|
||||
uniform vec3 u_sunDirection3f;
|
||||
uniform vec3 u_sunColor3f;
|
||||
|
||||
uniform sampler3D u_noiseTexture3D;
|
||||
uniform sampler2D u_skyIrradianceMap;
|
||||
#define GET_CLOUDS(pos3f, out1f)\
|
||||
if(pos3f == clamp(pos3f, vec3(0.0), vec3(1.0))) {\
|
||||
out1f = length(pos3f - clamp(pos3f, vec3(0.05), vec3(0.95)));\
|
||||
out1f = smoothstep(0.0, 1.0, max(1.0 - out1f * 15.0, 0.0));\
|
||||
out1f *= textureLod(u_noiseTexture3D, pos3f.xzy, 0.0).r;\
|
||||
out1f += u_densityModifier4f.w;\
|
||||
out1f = max(out1f * out1f * u_densityModifier4f.x + out1f * u_densityModifier4f.y + u_densityModifier4f.z, 0.0);\
|
||||
}else out1f = 0.0;
|
||||
|
||||
void main() {
|
||||
vec2 latLong = v_position2f * 2.0 - 1.0;
|
||||
float latLongLen = dot(latLong, latLong);
|
||||
if(latLongLen > 1.025) {
|
||||
output4f = vec4(0.0);
|
||||
return;
|
||||
}
|
||||
|
||||
float mag2 = 2.0 / (latLongLen + 1.0);
|
||||
vec3 dir;
|
||||
dir.y = mag2 - 1.0;
|
||||
dir.xz = latLong * mag2;
|
||||
|
||||
vec3 samplePos = vec3(0.0, -4.5 + u_cloudOffset3f.y * 0.05, 0.0) + dir * u_sampleStep1f * 0.2;
|
||||
samplePos = samplePos * vec3(0.05, 0.1, 0.05) + vec3(0.5, 0.0, 0.5);
|
||||
|
||||
float sample0, sample1;
|
||||
GET_CLOUDS(samplePos, sample0)
|
||||
|
||||
if(sample0 < 0.002) {
|
||||
output4f = vec4(0.0, 0.0, 0.0, 1.0);
|
||||
return;
|
||||
}
|
||||
|
||||
output4f.a = exp2(-sample0 * 5.0);
|
||||
|
||||
vec3 sunDirection = u_sunDirection3f * vec3(1.0, 2.0, 1.0) * 0.025;
|
||||
float sunVisibility = sample0;
|
||||
|
||||
GET_CLOUDS((samplePos + sunDirection), sample1)
|
||||
sunVisibility += sample1;
|
||||
GET_CLOUDS((samplePos + sunDirection * 2.0), sample1)
|
||||
sunVisibility += sample1;
|
||||
GET_CLOUDS((samplePos + sunDirection * 3.0), sample1)
|
||||
sunVisibility += sample1;
|
||||
GET_CLOUDS((samplePos + sunDirection * 4.0), sample1)
|
||||
sunVisibility += sample1;
|
||||
GET_CLOUDS((samplePos + sunDirection * 5.0), sample1)
|
||||
sunVisibility += sample1;
|
||||
|
||||
sunVisibility = exp2(-sunVisibility * 50.0);
|
||||
sunVisibility *= 1.0 - exp2(-sample0 * 1.2);
|
||||
|
||||
vec3 sky = textureLod(u_skyIrradianceMap, v_position2f * vec2(1.0, 0.5) + vec2(0.0, 0.5), 0.0).rgb * 0.05;
|
||||
float intergal = exp2(-7.33 * sample0) * -9.0 + 9.0;
|
||||
|
||||
output4f.rgb = (u_sunColor3f * sunVisibility + sky) * intergal;
|
||||
}
|
||||
|
@ -1,35 +1,35 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision mediump float;
|
||||
precision mediump sampler3D;
|
||||
|
||||
in vec2 v_position2f;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
uniform sampler3D u_inputTexture;
|
||||
uniform float u_textureLevel1f;
|
||||
uniform float u_textureLod1f;
|
||||
uniform vec2 u_sampleWeights2f;
|
||||
|
||||
void main() {
|
||||
float objsample = textureLod(u_inputTexture, vec3(v_position2f, u_textureLevel1f), u_textureLod1f).r;
|
||||
output4f = vec4(objsample * u_sampleWeights2f.x, 0.0, 0.0, objsample * u_sampleWeights2f.y + 1.0);
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision mediump float;
|
||||
precision mediump sampler3D;
|
||||
|
||||
in vec2 v_position2f;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
uniform sampler3D u_inputTexture;
|
||||
uniform float u_textureLevel1f;
|
||||
uniform float u_textureLod1f;
|
||||
uniform vec2 u_sampleWeights2f;
|
||||
|
||||
void main() {
|
||||
float objsample = textureLod(u_inputTexture, vec3(v_position2f, u_textureLevel1f), u_textureLod1f).r;
|
||||
output4f = vec4(objsample * u_sampleWeights2f.x, 0.0, 0.0, objsample * u_sampleWeights2f.y + 1.0);
|
||||
}
|
||||
|
@ -1,32 +1,32 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision mediump sampler2D;
|
||||
|
||||
layout(location = 0) in vec2 a_position2f;
|
||||
|
||||
out vec2 v_position2f;
|
||||
|
||||
uniform mat3x2 u_transformMatrix3x2f;
|
||||
|
||||
void main() {
|
||||
v_position2f = a_position2f * 0.5 + 0.5;
|
||||
gl_Position = vec4(u_transformMatrix3x2f * vec3(a_position2f, 1.0), 0.0, 1.0);
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision mediump sampler2D;
|
||||
|
||||
layout(location = 0) in vec2 a_position2f;
|
||||
|
||||
out vec2 v_position2f;
|
||||
|
||||
uniform mat3x2 u_transformMatrix3x2f;
|
||||
|
||||
void main() {
|
||||
v_position2f = a_position2f * 0.5 + 0.5;
|
||||
gl_Position = vec4(u_transformMatrix3x2f * vec3(a_position2f, 1.0), 0.0, 1.0);
|
||||
}
|
||||
|
@ -1,50 +1,50 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision highp sampler2D;
|
||||
|
||||
layout(location = 0) out float occlusionOut1f;
|
||||
|
||||
uniform mat4x3 u_sampleMatrix4x3f;
|
||||
uniform sampler2D u_cloudsTexture;
|
||||
|
||||
#define SAMPLE_DENSITY(v, a_, f)\
|
||||
f = u_sampleMatrix4x3f * v;\
|
||||
f.xy = (f.xz / (f.y + 1.0)) * 0.975 * 0.5 + 0.5;\
|
||||
if(f.xy == clamp(f.xy, vec2(0.001), vec2(0.999)))\
|
||||
a_ += textureLod(u_cloudsTexture, f.xy, 0.0).a * 0.125;\
|
||||
else\
|
||||
a_ += 0.125;
|
||||
|
||||
void main() {
|
||||
vec3 f;
|
||||
float accum = 0.0;
|
||||
|
||||
SAMPLE_DENSITY(vec4(0.000, 0.000, 1.000, 1.0), accum, f)
|
||||
SAMPLE_DENSITY(vec4(0.844, 0.521, 0.126, 1.0), accum, f)
|
||||
SAMPLE_DENSITY(vec4(-0.187, 0.979, 0.087, 1.0), accum, f)
|
||||
SAMPLE_DENSITY(vec4(0.402, -0.904, 0.145, 1.0), accum, f)
|
||||
SAMPLE_DENSITY(vec4(-0.944, -0.316, 0.098, 1.0), accum, f)
|
||||
SAMPLE_DENSITY(vec4(-0.759, 0.427, 0.491, 1.0), accum, f)
|
||||
SAMPLE_DENSITY(vec4(0.955, -0.285, 0.076, 1.0), accum, f)
|
||||
SAMPLE_DENSITY(vec4(-0.322, -0.664, 0.675, 1.0), accum, f)
|
||||
|
||||
occlusionOut1f = clamp(sqrt(accum) * 3.0 - 1.0, 0.0, 1.0);
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision highp sampler2D;
|
||||
|
||||
layout(location = 0) out float occlusionOut1f;
|
||||
|
||||
uniform mat4x3 u_sampleMatrix4x3f;
|
||||
uniform sampler2D u_cloudsTexture;
|
||||
|
||||
#define SAMPLE_DENSITY(v, a_, f)\
|
||||
f = u_sampleMatrix4x3f * v;\
|
||||
f.xy = (f.xz / (f.y + 1.0)) * 0.975 * 0.5 + 0.5;\
|
||||
if(f.xy == clamp(f.xy, vec2(0.001), vec2(0.999)))\
|
||||
a_ += textureLod(u_cloudsTexture, f.xy, 0.0).a * 0.125;\
|
||||
else\
|
||||
a_ += 0.125;
|
||||
|
||||
void main() {
|
||||
vec3 f;
|
||||
float accum = 0.0;
|
||||
|
||||
SAMPLE_DENSITY(vec4(0.000, 0.000, 1.000, 1.0), accum, f)
|
||||
SAMPLE_DENSITY(vec4(0.844, 0.521, 0.126, 1.0), accum, f)
|
||||
SAMPLE_DENSITY(vec4(-0.187, 0.979, 0.087, 1.0), accum, f)
|
||||
SAMPLE_DENSITY(vec4(0.402, -0.904, 0.145, 1.0), accum, f)
|
||||
SAMPLE_DENSITY(vec4(-0.944, -0.316, 0.098, 1.0), accum, f)
|
||||
SAMPLE_DENSITY(vec4(-0.759, 0.427, 0.491, 1.0), accum, f)
|
||||
SAMPLE_DENSITY(vec4(0.955, -0.285, 0.076, 1.0), accum, f)
|
||||
SAMPLE_DENSITY(vec4(-0.322, -0.664, 0.675, 1.0), accum, f)
|
||||
|
||||
occlusionOut1f = clamp(sqrt(accum) * 3.0 - 1.0, 0.0, 1.0);
|
||||
}
|
||||
|
@ -1,174 +1,174 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision highp sampler2D;
|
||||
|
||||
in vec2 v_position2f;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
uniform sampler2D u_gbufferColorTexture;
|
||||
uniform sampler2D u_gbufferNormalTexture;
|
||||
uniform sampler2D u_gbufferMaterialTexture;
|
||||
|
||||
uniform sampler2D u_gbufferDepthTexture;
|
||||
|
||||
uniform vec2 u_halfResolutionPixelAlignment2f;
|
||||
|
||||
#ifdef COMPILE_GLOBAL_AMBIENT_OCCLUSION
|
||||
uniform sampler2D u_ssaoTexture;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_SCREEN_SPACE_REFLECTIONS
|
||||
uniform sampler2D u_ssrReflectionTexture;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENV_MAP_REFLECTIONS
|
||||
uniform sampler2D u_environmentMap;
|
||||
#endif
|
||||
|
||||
uniform sampler2D u_irradianceMap;
|
||||
|
||||
uniform sampler2D u_brdfLUT;
|
||||
uniform sampler2D u_metalsLUT;
|
||||
|
||||
uniform mat4 u_inverseProjMatrix4f;
|
||||
uniform mat4 u_inverseViewMatrix4f;
|
||||
|
||||
uniform vec3 u_sunDirection3f;
|
||||
uniform float u_skyLightFactor1f;
|
||||
|
||||
#if defined(COMPILE_SCREEN_SPACE_REFLECTIONS) || defined(COMPILE_ENV_MAP_REFLECTIONS)
|
||||
#define LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_SPECULAR
|
||||
#endif
|
||||
|
||||
#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_env_map.glsl"
|
||||
|
||||
void main() {
|
||||
vec3 diffuseColor3f;
|
||||
vec3 normalVector3f;
|
||||
vec2 lightmapCoords2f;
|
||||
vec4 materialData4f;
|
||||
|
||||
float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r;
|
||||
if(depth < 0.00001) {
|
||||
discard;
|
||||
}
|
||||
|
||||
vec4 sampleVar4f = textureLod(u_gbufferColorTexture, v_position2f, 0.0);
|
||||
diffuseColor3f.rgb = sampleVar4f.rgb * sampleVar4f.rgb;
|
||||
lightmapCoords2f.x = sampleVar4f.a;
|
||||
sampleVar4f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0);
|
||||
normalVector3f.xyz = sampleVar4f.rgb * 2.0 - 1.0;
|
||||
normalVector3f.xyz = mat3(u_inverseViewMatrix4f) * normalVector3f.xyz;
|
||||
normalVector3f.xyz = normalize(normalVector3f.xyz);
|
||||
lightmapCoords2f.y = sampleVar4f.a;
|
||||
materialData4f = textureLod(u_gbufferMaterialTexture, v_position2f, 0.0);
|
||||
|
||||
float shadow = 0.075;
|
||||
|
||||
#ifdef COMPILE_GLOBAL_AMBIENT_OCCLUSION
|
||||
vec4 ao = textureLod(u_ssaoTexture, min(v_position2f * u_halfResolutionPixelAlignment2f, 1.0), 0.0);
|
||||
ao.g = ao.b > 0.0 ? ao.g : 1.0;
|
||||
shadow = mix(shadow, shadow * ao.g, 0.9);
|
||||
#endif
|
||||
|
||||
lightmapCoords2f *= lightmapCoords2f;
|
||||
vec3 irradianceMapSamplePos2f = normalVector3f;
|
||||
irradianceMapSamplePos2f.xz /= abs(irradianceMapSamplePos2f.y) + 1.0;
|
||||
float dst = 1.0 - dot(irradianceMapSamplePos2f.xz, irradianceMapSamplePos2f.xz);
|
||||
dst *= dst;
|
||||
irradianceMapSamplePos2f.xz *= 0.975;
|
||||
vec3 skyLight = vec3(sqrt(0.01 + max(-u_sunDirection3f.y, 0.0)));
|
||||
if(dst < 0.005) {
|
||||
vec4 sample1 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
|
||||
vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb;
|
||||
}else {
|
||||
irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25);
|
||||
irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75);
|
||||
skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb;
|
||||
}
|
||||
|
||||
skyLight *= lightmapCoords2f.g * u_skyLightFactor1f;
|
||||
|
||||
vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0;
|
||||
float emissive = materialData4f.b == 1.0 ? 0.0 : materialData4f.b;
|
||||
vec3 specular = vec3(0.0);
|
||||
|
||||
#ifdef COMPILE_ENV_MAP_REFLECTIONS
|
||||
float f = materialData4f.g < 0.06 ? 1.0 : 0.0;
|
||||
f += materialData4f.r < 0.5 ? 1.0 : 0.0;
|
||||
while((materialData4f.a >= 0.5 ? f : -1.0) == 0.0) {
|
||||
vec4 worldPosition4f = vec4(v_position2f, depth, 1.0) * 2.0 - 1.0;
|
||||
worldPosition4f = u_inverseProjMatrix4f * worldPosition4f;
|
||||
worldPosition4f.xyz /= worldPosition4f.w;
|
||||
float posDst = dot(worldPosition4f.xyz, worldPosition4f.xyz);
|
||||
if(posDst > 25.0) {
|
||||
break;
|
||||
}
|
||||
worldPosition4f = u_inverseViewMatrix4f * vec4(worldPosition4f.xyz, 0.0);
|
||||
vec3 viewDir3f = normalize(worldPosition4f.xyz); // need confirmation this should be negative
|
||||
vec3 reflectDir = reflect(viewDir3f, normalVector3f);
|
||||
reflectDir.xz /= abs(reflectDir.y) + 1.0;
|
||||
float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz);
|
||||
dst *= dst;
|
||||
reflectDir.xz = reflectDir.xz * 0.975;
|
||||
vec4 envMapSample4f;
|
||||
if(dst < 0.005) {
|
||||
vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
|
||||
vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a));
|
||||
}else {
|
||||
reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25);
|
||||
reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75);
|
||||
envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0);
|
||||
}
|
||||
if(envMapSample4f.a > 0.0) {
|
||||
specular = eaglercraftIBL_Specular(diffuseColor3f.rgb, envMapSample4f.rgb, viewDir3f, normalVector3f, materialData4f.rgb);
|
||||
specular *= 1.0 - sqrt(posDst) * 0.2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_SCREEN_SPACE_REFLECTIONS
|
||||
#ifndef COMPILE_ENV_MAP_REFLECTIONS
|
||||
float f = materialData4f.g < 0.06 ? 1.0 : 0.0;
|
||||
f += materialData4f.r < 0.5 ? 1.0 : 0.0;
|
||||
if(f == 0.0) {
|
||||
#else
|
||||
if((materialData4f.a < 0.5 ? f : -1.0) == 0.0) {
|
||||
#endif
|
||||
vec4 ssrSample = textureLod(u_ssrReflectionTexture, min(v_position2f * u_halfResolutionPixelAlignment2f, 1.0), 0.0);
|
||||
if(ssrSample.g > 0.0) {
|
||||
ssrSample.g -= 0.005;
|
||||
vec4 worldPosition4f = vec4(v_position2f, depth, 1.0) * 2.0 - 1.0;
|
||||
worldPosition4f = u_inverseProjMatrix4f * worldPosition4f;
|
||||
worldPosition4f = u_inverseViewMatrix4f * vec4(worldPosition4f.xyz / worldPosition4f.w, 0.0);
|
||||
vec3 viewDir3f = normalize(worldPosition4f.xyz); // need confirmation this should be negative
|
||||
specular = eaglercraftIBL_Specular(diffuseColor3f.rgb, ssrSample.rgb, viewDir3f, normalVector3f.xyz, materialData4f.rgb);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
output4f = vec4((diffuseColor3f.rgb * max(skyLight + blockLight, vec3(emissive * emissive * 20.0 + 0.075)) + specular * 8.0) * shadow, 1.0);
|
||||
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision highp sampler2D;
|
||||
|
||||
in vec2 v_position2f;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
uniform sampler2D u_gbufferColorTexture;
|
||||
uniform sampler2D u_gbufferNormalTexture;
|
||||
uniform sampler2D u_gbufferMaterialTexture;
|
||||
|
||||
uniform sampler2D u_gbufferDepthTexture;
|
||||
|
||||
uniform vec2 u_halfResolutionPixelAlignment2f;
|
||||
|
||||
#ifdef COMPILE_GLOBAL_AMBIENT_OCCLUSION
|
||||
uniform sampler2D u_ssaoTexture;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_SCREEN_SPACE_REFLECTIONS
|
||||
uniform sampler2D u_ssrReflectionTexture;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENV_MAP_REFLECTIONS
|
||||
uniform sampler2D u_environmentMap;
|
||||
#endif
|
||||
|
||||
uniform sampler2D u_irradianceMap;
|
||||
|
||||
uniform sampler2D u_brdfLUT;
|
||||
uniform sampler2D u_metalsLUT;
|
||||
|
||||
uniform mat4 u_inverseProjMatrix4f;
|
||||
uniform mat4 u_inverseViewMatrix4f;
|
||||
|
||||
uniform vec3 u_sunDirection3f;
|
||||
uniform float u_skyLightFactor1f;
|
||||
|
||||
#if defined(COMPILE_SCREEN_SPACE_REFLECTIONS) || defined(COMPILE_ENV_MAP_REFLECTIONS)
|
||||
#define LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_SPECULAR
|
||||
#endif
|
||||
|
||||
#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_env_map.glsl"
|
||||
|
||||
void main() {
|
||||
vec3 diffuseColor3f;
|
||||
vec3 normalVector3f;
|
||||
vec2 lightmapCoords2f;
|
||||
vec4 materialData4f;
|
||||
|
||||
float depth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r;
|
||||
if(depth < 0.00001) {
|
||||
discard;
|
||||
}
|
||||
|
||||
vec4 sampleVar4f = textureLod(u_gbufferColorTexture, v_position2f, 0.0);
|
||||
diffuseColor3f.rgb = sampleVar4f.rgb * sampleVar4f.rgb;
|
||||
lightmapCoords2f.x = sampleVar4f.a;
|
||||
sampleVar4f = textureLod(u_gbufferNormalTexture, v_position2f, 0.0);
|
||||
normalVector3f.xyz = sampleVar4f.rgb * 2.0 - 1.0;
|
||||
normalVector3f.xyz = mat3(u_inverseViewMatrix4f) * normalVector3f.xyz;
|
||||
normalVector3f.xyz = normalize(normalVector3f.xyz);
|
||||
lightmapCoords2f.y = sampleVar4f.a;
|
||||
materialData4f = textureLod(u_gbufferMaterialTexture, v_position2f, 0.0);
|
||||
|
||||
float shadow = 0.075;
|
||||
|
||||
#ifdef COMPILE_GLOBAL_AMBIENT_OCCLUSION
|
||||
vec4 ao = textureLod(u_ssaoTexture, min(v_position2f * u_halfResolutionPixelAlignment2f, 1.0), 0.0);
|
||||
ao.g = ao.b > 0.0 ? ao.g : 1.0;
|
||||
shadow = mix(shadow, shadow * ao.g, 0.9);
|
||||
#endif
|
||||
|
||||
lightmapCoords2f *= lightmapCoords2f;
|
||||
vec3 irradianceMapSamplePos2f = normalVector3f;
|
||||
irradianceMapSamplePos2f.xz /= abs(irradianceMapSamplePos2f.y) + 1.0;
|
||||
float dst = 1.0 - dot(irradianceMapSamplePos2f.xz, irradianceMapSamplePos2f.xz);
|
||||
dst *= dst;
|
||||
irradianceMapSamplePos2f.xz *= 0.975;
|
||||
vec3 skyLight = vec3(sqrt(0.01 + max(-u_sunDirection3f.y, 0.0)));
|
||||
if(dst < 0.005) {
|
||||
vec4 sample1 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
|
||||
vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb;
|
||||
}else {
|
||||
irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25);
|
||||
irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75);
|
||||
skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb;
|
||||
}
|
||||
|
||||
skyLight *= lightmapCoords2f.g * u_skyLightFactor1f;
|
||||
|
||||
vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0;
|
||||
float emissive = materialData4f.b == 1.0 ? 0.0 : materialData4f.b;
|
||||
vec3 specular = vec3(0.0);
|
||||
|
||||
#ifdef COMPILE_ENV_MAP_REFLECTIONS
|
||||
float f = materialData4f.g < 0.06 ? 1.0 : 0.0;
|
||||
f += materialData4f.r < 0.5 ? 1.0 : 0.0;
|
||||
while((materialData4f.a >= 0.5 ? f : -1.0) == 0.0) {
|
||||
vec4 worldPosition4f = vec4(v_position2f, depth, 1.0) * 2.0 - 1.0;
|
||||
worldPosition4f = u_inverseProjMatrix4f * worldPosition4f;
|
||||
worldPosition4f.xyz /= worldPosition4f.w;
|
||||
float posDst = dot(worldPosition4f.xyz, worldPosition4f.xyz);
|
||||
if(posDst > 25.0) {
|
||||
break;
|
||||
}
|
||||
worldPosition4f = u_inverseViewMatrix4f * vec4(worldPosition4f.xyz, 0.0);
|
||||
vec3 viewDir3f = normalize(worldPosition4f.xyz); // need confirmation this should be negative
|
||||
vec3 reflectDir = reflect(viewDir3f, normalVector3f);
|
||||
reflectDir.xz /= abs(reflectDir.y) + 1.0;
|
||||
float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz);
|
||||
dst *= dst;
|
||||
reflectDir.xz = reflectDir.xz * 0.975;
|
||||
vec4 envMapSample4f;
|
||||
if(dst < 0.005) {
|
||||
vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
|
||||
vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a));
|
||||
}else {
|
||||
reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25);
|
||||
reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75);
|
||||
envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0);
|
||||
}
|
||||
if(envMapSample4f.a > 0.0) {
|
||||
specular = eaglercraftIBL_Specular(diffuseColor3f.rgb, envMapSample4f.rgb, viewDir3f, normalVector3f, materialData4f.rgb);
|
||||
specular *= 1.0 - sqrt(posDst) * 0.2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_SCREEN_SPACE_REFLECTIONS
|
||||
#ifndef COMPILE_ENV_MAP_REFLECTIONS
|
||||
float f = materialData4f.g < 0.06 ? 1.0 : 0.0;
|
||||
f += materialData4f.r < 0.5 ? 1.0 : 0.0;
|
||||
if(f == 0.0) {
|
||||
#else
|
||||
if((materialData4f.a < 0.5 ? f : -1.0) == 0.0) {
|
||||
#endif
|
||||
vec4 ssrSample = textureLod(u_ssrReflectionTexture, min(v_position2f * u_halfResolutionPixelAlignment2f, 1.0), 0.0);
|
||||
if(ssrSample.g > 0.0) {
|
||||
ssrSample.g -= 0.005;
|
||||
vec4 worldPosition4f = vec4(v_position2f, depth, 1.0) * 2.0 - 1.0;
|
||||
worldPosition4f = u_inverseProjMatrix4f * worldPosition4f;
|
||||
worldPosition4f = u_inverseViewMatrix4f * vec4(worldPosition4f.xyz / worldPosition4f.w, 0.0);
|
||||
vec3 viewDir3f = normalize(worldPosition4f.xyz); // need confirmation this should be negative
|
||||
specular = eaglercraftIBL_Specular(diffuseColor3f.rgb, ssrSample.rgb, viewDir3f, normalVector3f.xyz, materialData4f.rgb);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
output4f = vec4((diffuseColor3f.rgb * max(skyLight + blockLight, vec3(emissive * emissive * 20.0 + 0.075)) + specular * 8.0) * shadow, 1.0);
|
||||
|
||||
}
|
||||
|
@ -1,116 +1,116 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
in vec3 a_position3f;
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
in vec2 a_texture2f;
|
||||
out vec2 v_texture2f;
|
||||
uniform mat4 u_textureMat4f01;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
in vec4 a_color4f;
|
||||
out vec4 v_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
in vec4 a_normal4f;
|
||||
out vec3 v_normal3f;
|
||||
out float v_block1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_STATE_WAVING_BLOCKS
|
||||
uniform mat4 u_modelMatrix4f;
|
||||
uniform mat4 u_viewMatrix4f;
|
||||
uniform vec3 u_wavingBlockOffset3f;
|
||||
uniform vec4 u_wavingBlockParam4f;
|
||||
#ifndef COMPILE_NORMAL_ATTRIB
|
||||
uniform float u_blockConstant1f;
|
||||
#endif
|
||||
#define DO_COMPILE_STATE_WAVING_BLOCKS
|
||||
#define FAKE_SIN(valueIn, valueOut)\
|
||||
valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\
|
||||
valueOut = valueOut * valueOut * (6.0 - 4.0 * valueOut) - 1.0;
|
||||
#define LIB_INCLUDE_WAVING_BLOCKS_FUNCTION
|
||||
#endif
|
||||
|
||||
#EAGLER INCLUDE (2) "eagler:glsl/deferred/lib/waving_blocks.glsl"
|
||||
|
||||
#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
out vec3 v_viewdir3f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
in vec2 a_lightmap2f;
|
||||
out vec2 v_lightmap2f;
|
||||
uniform mat4 u_textureMat4f02;
|
||||
#endif
|
||||
|
||||
uniform mat4 u_modelviewMat4f;
|
||||
uniform mat4 u_projectionMat4f;
|
||||
|
||||
#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
|
||||
|
||||
void main() {
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0);
|
||||
v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
v_color4f = a_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz);
|
||||
float blockId = v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0);
|
||||
v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z;
|
||||
#endif
|
||||
|
||||
vec4 pos = vec4(a_position3f, 1.0);
|
||||
|
||||
#ifdef DO_COMPILE_STATE_WAVING_BLOCKS
|
||||
#ifndef COMPILE_NORMAL_ATTRIB
|
||||
float blockId = u_blockConstant1f;
|
||||
#endif
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
if(v_lightmap2f.y > 0.33) {
|
||||
COMPUTE_WAVING_BLOCKS(pos, min(v_lightmap2f.y * 3.0 - 1.0, 1.0), 24.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f)
|
||||
}else {
|
||||
pos = u_modelviewMat4f * pos;
|
||||
}
|
||||
#else
|
||||
COMPUTE_WAVING_BLOCKS(pos, 1.0, 32.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f)
|
||||
#endif
|
||||
#else
|
||||
pos = u_modelviewMat4f * pos;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
v_viewdir3f = pos.xyz / pos.w;
|
||||
#endif
|
||||
|
||||
gl_Position = u_projectionMat4f * pos;
|
||||
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
in vec3 a_position3f;
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
in vec2 a_texture2f;
|
||||
out vec2 v_texture2f;
|
||||
uniform mat4 u_textureMat4f01;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
in vec4 a_color4f;
|
||||
out vec4 v_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
in vec4 a_normal4f;
|
||||
out vec3 v_normal3f;
|
||||
out float v_block1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_STATE_WAVING_BLOCKS
|
||||
uniform mat4 u_modelMatrix4f;
|
||||
uniform mat4 u_viewMatrix4f;
|
||||
uniform vec3 u_wavingBlockOffset3f;
|
||||
uniform vec4 u_wavingBlockParam4f;
|
||||
#ifndef COMPILE_NORMAL_ATTRIB
|
||||
uniform float u_blockConstant1f;
|
||||
#endif
|
||||
#define DO_COMPILE_STATE_WAVING_BLOCKS
|
||||
#define FAKE_SIN(valueIn, valueOut)\
|
||||
valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\
|
||||
valueOut = valueOut * valueOut * (6.0 - 4.0 * valueOut) - 1.0;
|
||||
#define LIB_INCLUDE_WAVING_BLOCKS_FUNCTION
|
||||
#endif
|
||||
|
||||
#EAGLER INCLUDE (2) "eagler:glsl/deferred/lib/waving_blocks.glsl"
|
||||
|
||||
#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
out vec3 v_viewdir3f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
in vec2 a_lightmap2f;
|
||||
out vec2 v_lightmap2f;
|
||||
uniform mat4 u_textureMat4f02;
|
||||
#endif
|
||||
|
||||
uniform mat4 u_modelviewMat4f;
|
||||
uniform mat4 u_projectionMat4f;
|
||||
|
||||
#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
|
||||
|
||||
void main() {
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0);
|
||||
v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
v_color4f = a_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz);
|
||||
float blockId = v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0);
|
||||
v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z;
|
||||
#endif
|
||||
|
||||
vec4 pos = vec4(a_position3f, 1.0);
|
||||
|
||||
#ifdef DO_COMPILE_STATE_WAVING_BLOCKS
|
||||
#ifndef COMPILE_NORMAL_ATTRIB
|
||||
float blockId = u_blockConstant1f;
|
||||
#endif
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
if(v_lightmap2f.y > 0.33) {
|
||||
COMPUTE_WAVING_BLOCKS(pos, min(v_lightmap2f.y * 3.0 - 1.0, 1.0), 24.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f)
|
||||
}else {
|
||||
pos = u_modelviewMat4f * pos;
|
||||
}
|
||||
#else
|
||||
COMPUTE_WAVING_BLOCKS(pos, 1.0, 32.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f)
|
||||
#endif
|
||||
#else
|
||||
pos = u_modelviewMat4f * pos;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
v_viewdir3f = pos.xyz / pos.w;
|
||||
#endif
|
||||
|
||||
gl_Position = u_projectionMat4f * pos;
|
||||
|
||||
}
|
||||
|
@ -1,168 +1,168 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
in vec2 v_texture2f;
|
||||
#endif
|
||||
|
||||
uniform vec4 u_color4f;
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
in vec4 v_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
in vec3 v_normal3f;
|
||||
in float v_block1f;
|
||||
#else
|
||||
uniform vec3 u_uniformNormal3f;
|
||||
uniform float u_blockConstant1f;
|
||||
#endif
|
||||
|
||||
uniform float u_useEnvMap1f;
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
in vec2 v_lightmap2f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
uniform sampler2D u_samplerTexture;
|
||||
#ifndef COMPILE_TEXTURE_ATTRIB
|
||||
uniform vec2 u_textureCoords01;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
#ifndef COMPILE_LIGHTMAP_ATTRIB
|
||||
uniform vec2 u_textureCoords02;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
uniform float u_alphaTestRef1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
|
||||
uniform vec2 u_textureAnisotropicFix;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_BLEND_ADD
|
||||
uniform vec4 u_colorBlendSrc4f;
|
||||
uniform vec4 u_colorBlendAdd4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
uniform sampler2D u_samplerNormalMaterial;
|
||||
in vec3 v_viewdir3f;
|
||||
#ifndef COMPILE_TEXTURE_ATTRIB
|
||||
uniform vec2 u_textureCoords01;
|
||||
#endif
|
||||
#else
|
||||
uniform vec3 u_materialConstants3f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
mat3 cotangent_frame(in vec3 N, in vec3 p, in vec2 uv) {
|
||||
vec3 dp1 = dFdx(p);
|
||||
vec3 dp2 = dFdy(p);
|
||||
vec2 duv1 = dFdx(uv);
|
||||
vec2 duv2 = dFdy(uv);
|
||||
vec3 dp2perp = cross(dp2, N);
|
||||
vec3 dp1perp = cross(N, dp1);
|
||||
vec3 T = dp2perp * duv1.x + dp1perp * duv2.x;
|
||||
vec3 B = dp2perp * duv1.y + dp1perp * duv2.y;
|
||||
float invmax = inversesqrt(max(dot(T,T), dot(B,B)));
|
||||
return mat3(T * invmax, B * invmax, N);
|
||||
}
|
||||
#endif
|
||||
|
||||
layout(location = 0) out vec4 gbufferColor4f;
|
||||
layout(location = 1) out vec4 gbufferNormal4f;
|
||||
layout(location = 2) out vec4 gbufferMaterial4f;
|
||||
|
||||
void main() {
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
vec4 color = v_color4f * u_color4f;
|
||||
#else
|
||||
vec4 color = u_color4f;
|
||||
#endif
|
||||
|
||||
vec3 normal;
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
normal = normalize(v_normal3f);
|
||||
#else
|
||||
normal = u_uniformNormal3f;
|
||||
#endif
|
||||
|
||||
#if defined(COMPILE_ENABLE_TEXTURE2D) || defined(COMPILE_NORMAL_MATERIAL_TEXTURE)
|
||||
vec2 uv;
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
|
||||
uv = floor(uv * u_textureAnisotropicFix) + 0.5;
|
||||
uv /= u_textureAnisotropicFix;
|
||||
#else
|
||||
uv = v_texture2f;
|
||||
#endif
|
||||
#else
|
||||
uv = u_textureCoords01;
|
||||
#endif
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
color *= texture(u_samplerTexture, uv);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
vec2 lightmap = vec2(0.0, 1.0);
|
||||
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
lightmap = v_lightmap2f;
|
||||
#else
|
||||
lightmap = u_textureCoords02;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_BLEND_ADD
|
||||
color = color * u_colorBlendSrc4f + u_colorBlendAdd4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
if(color.a < u_alphaTestRef1f) discard;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
vec2 uv2 = vec2(1.0, 0.5) * uv;
|
||||
vec2 normal2 = texture(u_samplerNormalMaterial, uv2).xy;
|
||||
mat3 cf;
|
||||
if(normal2.x + normal2.y > 0.0) {
|
||||
normal2 *= 2.0;
|
||||
normal2 -= 1.0;
|
||||
cf = cotangent_frame(normal, normalize(v_viewdir3f), uv);
|
||||
normal = cf * vec3(normal2, sqrt(1.0 - dot(normal2, normal2)));
|
||||
}
|
||||
uv2.y += 0.5;
|
||||
vec3 material = texture(u_samplerNormalMaterial, uv2).rgb;
|
||||
#else
|
||||
vec3 material = u_materialConstants3f;
|
||||
#endif
|
||||
|
||||
gbufferColor4f.rgb = color.rgb;
|
||||
gbufferColor4f.a = lightmap.r;
|
||||
gbufferNormal4f.rgb = normal * 0.5 + 0.5;
|
||||
gbufferNormal4f.a = lightmap.g;
|
||||
gbufferMaterial4f = vec4(material.rgb, u_useEnvMap1f);
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
in vec2 v_texture2f;
|
||||
#endif
|
||||
|
||||
uniform vec4 u_color4f;
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
in vec4 v_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
in vec3 v_normal3f;
|
||||
in float v_block1f;
|
||||
#else
|
||||
uniform vec3 u_uniformNormal3f;
|
||||
uniform float u_blockConstant1f;
|
||||
#endif
|
||||
|
||||
uniform float u_useEnvMap1f;
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
in vec2 v_lightmap2f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
uniform sampler2D u_samplerTexture;
|
||||
#ifndef COMPILE_TEXTURE_ATTRIB
|
||||
uniform vec2 u_textureCoords01;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
#ifndef COMPILE_LIGHTMAP_ATTRIB
|
||||
uniform vec2 u_textureCoords02;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
uniform float u_alphaTestRef1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
|
||||
uniform vec2 u_textureAnisotropicFix;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_BLEND_ADD
|
||||
uniform vec4 u_colorBlendSrc4f;
|
||||
uniform vec4 u_colorBlendAdd4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
uniform sampler2D u_samplerNormalMaterial;
|
||||
in vec3 v_viewdir3f;
|
||||
#ifndef COMPILE_TEXTURE_ATTRIB
|
||||
uniform vec2 u_textureCoords01;
|
||||
#endif
|
||||
#else
|
||||
uniform vec3 u_materialConstants3f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
mat3 cotangent_frame(in vec3 N, in vec3 p, in vec2 uv) {
|
||||
vec3 dp1 = dFdx(p);
|
||||
vec3 dp2 = dFdy(p);
|
||||
vec2 duv1 = dFdx(uv);
|
||||
vec2 duv2 = dFdy(uv);
|
||||
vec3 dp2perp = cross(dp2, N);
|
||||
vec3 dp1perp = cross(N, dp1);
|
||||
vec3 T = dp2perp * duv1.x + dp1perp * duv2.x;
|
||||
vec3 B = dp2perp * duv1.y + dp1perp * duv2.y;
|
||||
float invmax = inversesqrt(max(dot(T,T), dot(B,B)));
|
||||
return mat3(T * invmax, B * invmax, N);
|
||||
}
|
||||
#endif
|
||||
|
||||
layout(location = 0) out vec4 gbufferColor4f;
|
||||
layout(location = 1) out vec4 gbufferNormal4f;
|
||||
layout(location = 2) out vec4 gbufferMaterial4f;
|
||||
|
||||
void main() {
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
vec4 color = v_color4f * u_color4f;
|
||||
#else
|
||||
vec4 color = u_color4f;
|
||||
#endif
|
||||
|
||||
vec3 normal;
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
normal = v_normal3f;
|
||||
#else
|
||||
normal = u_uniformNormal3f;
|
||||
#endif
|
||||
|
||||
#if defined(COMPILE_ENABLE_TEXTURE2D) || defined(COMPILE_NORMAL_MATERIAL_TEXTURE)
|
||||
vec2 uv;
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
|
||||
uv = floor(uv * u_textureAnisotropicFix) + 0.5;
|
||||
uv /= u_textureAnisotropicFix;
|
||||
#else
|
||||
uv = v_texture2f;
|
||||
#endif
|
||||
#else
|
||||
uv = u_textureCoords01;
|
||||
#endif
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
color *= texture(u_samplerTexture, uv);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
vec2 lightmap = vec2(0.0, 1.0);
|
||||
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
lightmap = v_lightmap2f;
|
||||
#else
|
||||
lightmap = u_textureCoords02;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_BLEND_ADD
|
||||
color = color * u_colorBlendSrc4f + u_colorBlendAdd4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
if(color.a < u_alphaTestRef1f) discard;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
vec2 uv2 = vec2(1.0, 0.5) * uv;
|
||||
vec2 normal2 = texture(u_samplerNormalMaterial, uv2).xy;
|
||||
mat3 cf;
|
||||
if(normal2.x + normal2.y > 0.0) {
|
||||
normal2 *= 2.0;
|
||||
normal2 -= 1.0;
|
||||
cf = cotangent_frame(normal, normalize(v_viewdir3f), uv);
|
||||
normal = cf * vec3(normal2, sqrt(1.0 - dot(normal2, normal2)));
|
||||
}
|
||||
uv2.y += 0.5;
|
||||
vec3 material = texture(u_samplerNormalMaterial, uv2).rgb;
|
||||
#else
|
||||
vec3 material = u_materialConstants3f;
|
||||
#endif
|
||||
|
||||
gbufferColor4f.rgb = color.rgb;
|
||||
gbufferColor4f.a = lightmap.r;
|
||||
gbufferNormal4f.rgb = normal * 0.5 + 0.5;
|
||||
gbufferNormal4f.a = lightmap.g;
|
||||
gbufferMaterial4f = vec4(material.rgb, u_useEnvMap1f);
|
||||
}
|
||||
|
@ -1,104 +1,104 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision highp sampler2D;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
in vec2 v_position2f;
|
||||
|
||||
uniform sampler2D u_gbufferDepthTexture;
|
||||
uniform sampler2D u_gbufferNormalTexture;
|
||||
uniform sampler2D u_fogDepthTexture;
|
||||
|
||||
#ifdef COMPILE_FOG_LIGHT_SHAFTS
|
||||
uniform sampler2D u_lightShaftsTexture;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_FOG_ATMOSPHERE
|
||||
uniform sampler2D u_environmentMap;
|
||||
uniform vec3 u_sunColorAdd3f;
|
||||
#endif
|
||||
|
||||
uniform mat4 u_inverseViewProjMatrix4f;
|
||||
|
||||
#ifdef COMPILE_FOG_LINEAR
|
||||
uniform vec2 u_linearFogParam2f;
|
||||
#else
|
||||
uniform float u_expFogDensity1f;
|
||||
#endif
|
||||
|
||||
uniform vec4 u_fogColorLight4f;
|
||||
uniform vec4 u_fogColorDark4f;
|
||||
|
||||
void main() {
|
||||
vec4 fragPos4f = vec4(v_position2f, textureLod(u_fogDepthTexture, v_position2f, 0.0).r, 1.0);
|
||||
|
||||
#ifdef COMPILE_FOG_ATMOSPHERE
|
||||
if(fragPos4f.z <= 0.0000001) {
|
||||
discard;
|
||||
}
|
||||
#endif
|
||||
|
||||
float solidDepth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r;
|
||||
if(solidDepth != fragPos4f.z) {
|
||||
discard;
|
||||
}
|
||||
|
||||
fragPos4f.xyz *= 2.0;
|
||||
fragPos4f.xyz -= 1.0;
|
||||
|
||||
fragPos4f = u_inverseViewProjMatrix4f * fragPos4f;
|
||||
fragPos4f.xyz /= fragPos4f.w;
|
||||
fragPos4f.w = 1.0;
|
||||
|
||||
float l = length(fragPos4f.xyz);
|
||||
#ifdef COMPILE_FOG_LINEAR
|
||||
float f = (l - u_linearFogParam2f.x) / (u_linearFogParam2f.y - u_linearFogParam2f.x);
|
||||
#else
|
||||
float f = 1.0 - exp(-u_expFogDensity1f * l);
|
||||
#endif
|
||||
float f2 = textureLod(u_gbufferNormalTexture, v_position2f, 0.0).a;
|
||||
vec4 fogColor4f = mix(u_fogColorDark4f, u_fogColorLight4f, f2 * f2);
|
||||
f = clamp(f, 0.0, 1.0) * fogColor4f.a;
|
||||
|
||||
#ifdef COMPILE_FOG_ATMOSPHERE
|
||||
fragPos4f.xyz /= -l;
|
||||
fragPos4f.xz /= abs(fragPos4f.y) + 1.0;
|
||||
fragPos4f.xz *= 0.75;
|
||||
|
||||
vec3 envMapSample3f;
|
||||
|
||||
fragPos4f.xz *= vec2(-0.5, -0.25);
|
||||
fragPos4f.xz += vec2(0.5, 0.25);
|
||||
envMapSample3f = textureLod(u_environmentMap, fragPos4f.xz, 0.0).rgb + u_sunColorAdd3f;
|
||||
|
||||
#ifdef COMPILE_FOG_LIGHT_SHAFTS
|
||||
f2 = textureLod(u_lightShaftsTexture, v_position2f, 0.0).r;
|
||||
envMapSample3f *= pow(f2, 2.25);
|
||||
f = (f * 0.85 + 0.2) * f2 + f * (1.0 - f2);
|
||||
#endif
|
||||
|
||||
output4f = vec4(envMapSample3f * fogColor4f.rgb, f);
|
||||
#else
|
||||
output4f = vec4(fogColor4f.rgb, f);
|
||||
#endif
|
||||
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision highp sampler2D;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
in vec2 v_position2f;
|
||||
|
||||
uniform sampler2D u_gbufferDepthTexture;
|
||||
uniform sampler2D u_gbufferNormalTexture;
|
||||
uniform sampler2D u_fogDepthTexture;
|
||||
|
||||
#ifdef COMPILE_FOG_LIGHT_SHAFTS
|
||||
uniform sampler2D u_lightShaftsTexture;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_FOG_ATMOSPHERE
|
||||
uniform sampler2D u_environmentMap;
|
||||
uniform vec3 u_sunColorAdd3f;
|
||||
#endif
|
||||
|
||||
uniform mat4 u_inverseViewProjMatrix4f;
|
||||
|
||||
#ifdef COMPILE_FOG_LINEAR
|
||||
uniform vec2 u_linearFogParam2f;
|
||||
#else
|
||||
uniform float u_expFogDensity1f;
|
||||
#endif
|
||||
|
||||
uniform vec4 u_fogColorLight4f;
|
||||
uniform vec4 u_fogColorDark4f;
|
||||
|
||||
void main() {
|
||||
vec4 fragPos4f = vec4(v_position2f, textureLod(u_fogDepthTexture, v_position2f, 0.0).r, 1.0);
|
||||
|
||||
#ifdef COMPILE_FOG_ATMOSPHERE
|
||||
if(fragPos4f.z <= 0.0000001) {
|
||||
discard;
|
||||
}
|
||||
#endif
|
||||
|
||||
float solidDepth = textureLod(u_gbufferDepthTexture, v_position2f, 0.0).r;
|
||||
if(solidDepth != fragPos4f.z) {
|
||||
discard;
|
||||
}
|
||||
|
||||
fragPos4f.xyz *= 2.0;
|
||||
fragPos4f.xyz -= 1.0;
|
||||
|
||||
fragPos4f = u_inverseViewProjMatrix4f * fragPos4f;
|
||||
fragPos4f.xyz /= fragPos4f.w;
|
||||
fragPos4f.w = 1.0;
|
||||
|
||||
float l = length(fragPos4f.xyz);
|
||||
#ifdef COMPILE_FOG_LINEAR
|
||||
float f = (l - u_linearFogParam2f.x) / (u_linearFogParam2f.y - u_linearFogParam2f.x);
|
||||
#else
|
||||
float f = 1.0 - exp(-u_expFogDensity1f * l);
|
||||
#endif
|
||||
float f2 = textureLod(u_gbufferNormalTexture, v_position2f, 0.0).a;
|
||||
vec4 fogColor4f = mix(u_fogColorDark4f, u_fogColorLight4f, f2 * f2);
|
||||
f = clamp(f, 0.0, 1.0) * fogColor4f.a;
|
||||
|
||||
#ifdef COMPILE_FOG_ATMOSPHERE
|
||||
fragPos4f.xyz /= -l;
|
||||
fragPos4f.xz /= abs(fragPos4f.y) + 1.0;
|
||||
fragPos4f.xz *= 0.75;
|
||||
|
||||
vec3 envMapSample3f;
|
||||
|
||||
fragPos4f.xz *= vec2(-0.5, -0.25);
|
||||
fragPos4f.xz += vec2(0.5, 0.25);
|
||||
envMapSample3f = textureLod(u_environmentMap, fragPos4f.xz, 0.0).rgb + u_sunColorAdd3f;
|
||||
|
||||
#ifdef COMPILE_FOG_LIGHT_SHAFTS
|
||||
f2 = textureLod(u_lightShaftsTexture, v_position2f, 0.0).r;
|
||||
envMapSample3f *= pow(f2, 2.25);
|
||||
f = (f * 0.85 + 0.2) * f2 + f * (1.0 - f2);
|
||||
#endif
|
||||
|
||||
output4f = vec4(envMapSample3f * fogColor4f.rgb, f);
|
||||
#else
|
||||
output4f = vec4(fogColor4f.rgb, f);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
@ -1,30 +1,30 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision highp sampler2D;
|
||||
|
||||
layout(location = 0) in vec2 a_position2f;
|
||||
|
||||
out vec2 v_position2f;
|
||||
|
||||
void main() {
|
||||
v_position2f = a_position2f * 0.5 + 0.5;
|
||||
gl_Position = vec4(a_position2f, 0.0, 1.0);
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision highp sampler2D;
|
||||
|
||||
layout(location = 0) in vec2 a_position2f;
|
||||
|
||||
out vec2 v_position2f;
|
||||
|
||||
void main() {
|
||||
v_position2f = a_position2f * 0.5 + 0.5;
|
||||
gl_Position = vec4(a_position2f, 0.0, 1.0);
|
||||
}
|
||||
|
@ -1,61 +1,61 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#if !defined(COMPILE_ENABLE_ALPHA_TEST) && !defined(COMPILE_COLORED_SHADOWS)
|
||||
#undef COMPILE_ENABLE_TEXTURE2D
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLORED_SHADOWS
|
||||
layout(location = 0) out vec4 output4f;
|
||||
uniform vec4 u_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
uniform sampler2D u_samplerTexture;
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
in vec2 v_texture2f;
|
||||
#else
|
||||
uniform vec2 u_textureCoords01;
|
||||
#endif
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
uniform float u_alphaTestRef1f;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
void main() {
|
||||
#ifdef COMPILE_COLORED_SHADOWS
|
||||
vec4 color = u_color4f;
|
||||
#else
|
||||
vec4 color = vec4(1.0);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
color *= texture(u_samplerTexture, v_texture2f);
|
||||
#else
|
||||
color *= texture(u_samplerTexture, u_textureCoords01);
|
||||
#endif
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
if(color.a < u_alphaTestRef1f) discard;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLORED_SHADOWS
|
||||
output4f = vec4(mix(vec3(1.0), color.rgb, color.a), color.a);
|
||||
#endif
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#if !defined(COMPILE_ENABLE_ALPHA_TEST) && !defined(COMPILE_COLORED_SHADOWS)
|
||||
#undef COMPILE_ENABLE_TEXTURE2D
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLORED_SHADOWS
|
||||
layout(location = 0) out vec4 output4f;
|
||||
uniform vec4 u_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
uniform sampler2D u_samplerTexture;
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
in vec2 v_texture2f;
|
||||
#else
|
||||
uniform vec2 u_textureCoords01;
|
||||
#endif
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
uniform float u_alphaTestRef1f;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
void main() {
|
||||
#ifdef COMPILE_COLORED_SHADOWS
|
||||
vec4 color = u_color4f;
|
||||
#else
|
||||
vec4 color = vec4(1.0);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
color *= texture(u_samplerTexture, v_texture2f);
|
||||
#else
|
||||
color *= texture(u_samplerTexture, u_textureCoords01);
|
||||
#endif
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
if(color.a < u_alphaTestRef1f) discard;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLORED_SHADOWS
|
||||
output4f = vec4(mix(vec3(1.0), color.rgb, color.a), color.a);
|
||||
#endif
|
||||
}
|
||||
|
@ -1,103 +1,103 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
in vec3 a_position3f;
|
||||
|
||||
#if defined(COMPILE_ENABLE_ALPHA_TEST) && defined(COMPILE_ENABLE_TEXTURE2D)
|
||||
#define DO_SHADOW_ALPHA_TEST
|
||||
#endif
|
||||
|
||||
#ifdef DO_SHADOW_ALPHA_TEST
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
in vec2 a_texture2f;
|
||||
out vec2 v_texture2f;
|
||||
uniform mat4 u_textureMat4f01;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
uniform mat4 u_modelviewProjMat4f;
|
||||
|
||||
#ifdef COMPILE_STATE_WAVING_BLOCKS
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
in vec4 a_normal4f;
|
||||
#else
|
||||
uniform float u_blockConstant1f;
|
||||
#endif
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
in vec2 a_lightmap2f;
|
||||
uniform mat4 u_textureMat4f02;
|
||||
#else
|
||||
uniform vec2 u_textureCoords02;
|
||||
#endif
|
||||
#endif
|
||||
uniform mat4 u_modelMatrix4f;
|
||||
uniform mat4 u_viewMatrix4f;
|
||||
uniform vec3 u_wavingBlockOffset3f;
|
||||
uniform vec4 u_wavingBlockParam4f;
|
||||
#define DO_COMPILE_STATE_WAVING_BLOCKS
|
||||
#define FAKE_SIN(valueIn, valueOut)\
|
||||
valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\
|
||||
valueOut = valueOut * valueOut * (6.0 - 4.0 * valueOut) - 1.0;
|
||||
#define LIB_INCLUDE_WAVING_BLOCKS_FUNCTION
|
||||
#endif
|
||||
|
||||
#EAGLER INCLUDE (2) "eagler:glsl/deferred/lib/waving_blocks.glsl"
|
||||
|
||||
#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
|
||||
|
||||
void main() {
|
||||
#ifdef DO_SHADOW_ALPHA_TEST
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0);
|
||||
v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z;
|
||||
#endif
|
||||
#endif
|
||||
#ifdef DO_COMPILE_STATE_WAVING_BLOCKS
|
||||
vec4 pos = vec4(a_position3f, 1.0);
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
float blockId = floor((a_normal4f.w + 1.0) * 127.0 + 0.5);
|
||||
#else
|
||||
float blockId = u_blockConstant1f;
|
||||
#endif
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
mat4x2 texMat4x2 = mat4x2(
|
||||
u_textureMat4f02[0].yw,
|
||||
u_textureMat4f02[1].yw,
|
||||
u_textureMat4f02[2].yw,
|
||||
u_textureMat4f02[3].yw
|
||||
);
|
||||
vec2 v_lightmapTmp2f = texMat4x2 * vec4(a_lightmap2f, 0.0, 1.0);
|
||||
v_lightmapTmp2f.x = v_lightmapTmp2f.x / v_lightmapTmp2f.y;
|
||||
#else
|
||||
vec2 v_lightmapTmp2f = vec2(u_textureCoords02.y, 0.0);
|
||||
#endif
|
||||
if(v_lightmapTmp2f.x > 0.33) {
|
||||
COMPUTE_WAVING_BLOCKS(pos, min(v_lightmapTmp2f.x * 3.0 - 1.0, 1.0), 24.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewProjMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f)
|
||||
}else {
|
||||
pos = u_modelviewProjMat4f * pos;
|
||||
}
|
||||
#else
|
||||
COMPUTE_WAVING_BLOCKS(pos, 1.0, 32.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewProjMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f)
|
||||
#endif
|
||||
gl_Position = pos;
|
||||
#else
|
||||
gl_Position = u_modelviewProjMat4f * vec4(a_position3f, 1.0);
|
||||
#endif
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
in vec3 a_position3f;
|
||||
|
||||
#if defined(COMPILE_ENABLE_ALPHA_TEST) && defined(COMPILE_ENABLE_TEXTURE2D)
|
||||
#define DO_SHADOW_ALPHA_TEST
|
||||
#endif
|
||||
|
||||
#ifdef DO_SHADOW_ALPHA_TEST
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
in vec2 a_texture2f;
|
||||
out vec2 v_texture2f;
|
||||
uniform mat4 u_textureMat4f01;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
uniform mat4 u_modelviewProjMat4f;
|
||||
|
||||
#ifdef COMPILE_STATE_WAVING_BLOCKS
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
in vec4 a_normal4f;
|
||||
#else
|
||||
uniform float u_blockConstant1f;
|
||||
#endif
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
in vec2 a_lightmap2f;
|
||||
uniform mat4 u_textureMat4f02;
|
||||
#else
|
||||
uniform vec2 u_textureCoords02;
|
||||
#endif
|
||||
#endif
|
||||
uniform mat4 u_modelMatrix4f;
|
||||
uniform mat4 u_viewMatrix4f;
|
||||
uniform vec3 u_wavingBlockOffset3f;
|
||||
uniform vec4 u_wavingBlockParam4f;
|
||||
#define DO_COMPILE_STATE_WAVING_BLOCKS
|
||||
#define FAKE_SIN(valueIn, valueOut)\
|
||||
valueOut = abs(1.0 - fract(valueIn * 0.159155) * 2.0);\
|
||||
valueOut = valueOut * valueOut * (6.0 - 4.0 * valueOut) - 1.0;
|
||||
#define LIB_INCLUDE_WAVING_BLOCKS_FUNCTION
|
||||
#endif
|
||||
|
||||
#EAGLER INCLUDE (2) "eagler:glsl/deferred/lib/waving_blocks.glsl"
|
||||
|
||||
#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
|
||||
|
||||
void main() {
|
||||
#ifdef DO_SHADOW_ALPHA_TEST
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0);
|
||||
v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z;
|
||||
#endif
|
||||
#endif
|
||||
#ifdef DO_COMPILE_STATE_WAVING_BLOCKS
|
||||
vec4 pos = vec4(a_position3f, 1.0);
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
float blockId = floor((a_normal4f.w + 1.0) * 127.0 + 0.5);
|
||||
#else
|
||||
float blockId = u_blockConstant1f;
|
||||
#endif
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
mat4x2 texMat4x2 = mat4x2(
|
||||
u_textureMat4f02[0].yw,
|
||||
u_textureMat4f02[1].yw,
|
||||
u_textureMat4f02[2].yw,
|
||||
u_textureMat4f02[3].yw
|
||||
);
|
||||
vec2 v_lightmapTmp2f = texMat4x2 * vec4(a_lightmap2f, 0.0, 1.0);
|
||||
v_lightmapTmp2f.x = v_lightmapTmp2f.x / v_lightmapTmp2f.y;
|
||||
#else
|
||||
vec2 v_lightmapTmp2f = vec2(u_textureCoords02.y, 0.0);
|
||||
#endif
|
||||
if(v_lightmapTmp2f.x > 0.33) {
|
||||
COMPUTE_WAVING_BLOCKS(pos, min(v_lightmapTmp2f.x * 3.0 - 1.0, 1.0), 24.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewProjMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f)
|
||||
}else {
|
||||
pos = u_modelviewProjMat4f * pos;
|
||||
}
|
||||
#else
|
||||
COMPUTE_WAVING_BLOCKS(pos, 1.0, 32.0, blockId, u_modelMatrix4f, u_viewMatrix4f, u_modelviewProjMat4f, u_wavingBlockOffset3f, u_wavingBlockParam4f)
|
||||
#endif
|
||||
gl_Position = pos;
|
||||
#else
|
||||
gl_Position = u_modelviewProjMat4f * vec4(a_position3f, 1.0);
|
||||
#endif
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
item,damage,red,green,blue,intensity
|
||||
minecraft:beacon,0,0.4493,0.6007,1.0000,500.0
|
||||
minecraft:glowstone,0,1.0000,0.6636,0.3583,10.0
|
||||
minecraft:lit_pumpkin,0,1.0000,0.5447,0.2005,10.0
|
||||
minecraft:torch,0,1.0000,0.5983,0.2655,10.0
|
||||
minecraft:redstone_torch,0,1.0000,0.1578,0.0000,4.0
|
||||
minecraft:sea_lantern,0,0.5530,0.6468,1.0000,10.0,
|
||||
minecraft:lava_bucket,0,1.0000,0.4461,0.1054,6.0,
|
||||
minecraft:nether_star,0,0.5711,0.6611,1.0000,6.0
|
||||
minecraft:ender_eye,0,0.1990,0.7750,0.4130,4.0
|
||||
item,damage,red,green,blue,intensity
|
||||
minecraft:beacon,0,0.4493,0.6007,1.0000,500.0
|
||||
minecraft:glowstone,0,1.0000,0.6636,0.3583,10.0
|
||||
minecraft:lit_pumpkin,0,1.0000,0.5447,0.2005,10.0
|
||||
minecraft:torch,0,1.0000,0.5983,0.2655,10.0
|
||||
minecraft:redstone_torch,0,1.0000,0.1578,0.0000,4.0
|
||||
minecraft:sea_lantern,0,0.5530,0.6468,1.0000,10.0,
|
||||
minecraft:lava_bucket,0,1.0000,0.4461,0.1054,6.0,
|
||||
minecraft:nether_star,0,0.5711,0.6611,1.0000,6.0
|
||||
minecraft:ender_eye,0,0.1990,0.7750,0.4130,4.0
|
||||
|
|
@ -1,471 +1,471 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision highp sampler2DShadow;
|
||||
|
||||
in vec4 v_position4f;
|
||||
|
||||
#ifdef COMPILE_FOG_LIGHT_SHAFTS
|
||||
in vec2 v_positionClip2f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
in vec2 v_texture2f;
|
||||
#endif
|
||||
|
||||
uniform vec4 u_color4f;
|
||||
|
||||
#ifdef COMPILE_BLEND_ADD
|
||||
uniform vec4 u_colorBlendSrc4f;
|
||||
uniform vec4 u_colorBlendAdd4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
in vec4 v_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
in vec3 v_normal3f;
|
||||
in float v_block1f;
|
||||
#else
|
||||
uniform vec3 u_uniformNormal3f;
|
||||
uniform float u_blockConstant1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
in vec2 v_lightmap2f;
|
||||
#else
|
||||
uniform vec2 u_textureCoords02;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
uniform sampler2D u_samplerTexture;
|
||||
#ifndef COMPILE_TEXTURE_ATTRIB
|
||||
uniform vec2 u_textureCoords01;
|
||||
#endif
|
||||
#else
|
||||
#undef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
in vec3 v_objectPosition3f;
|
||||
uniform ivec4 u_texGenPlane4i;
|
||||
uniform vec4 u_texGenS4f;
|
||||
uniform vec4 u_texGenT4f;
|
||||
uniform vec4 u_texGenR4f;
|
||||
uniform vec4 u_texGenQ4f;
|
||||
uniform mat4 u_textureMat4f01;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
uniform float u_alphaTestRef1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
|
||||
uniform vec2 u_textureAnisotropicFix;
|
||||
#endif
|
||||
|
||||
uniform mat4 u_inverseViewMatrix4f;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
#ifdef COMPILE_DYNAMIC_LIGHTS
|
||||
struct DynamicLight {
|
||||
mediump vec4 u_lightPosition4f;
|
||||
mediump vec4 u_lightColor4f;
|
||||
};
|
||||
layout(std140) uniform u_chunkLightingData {
|
||||
mediump int u_dynamicLightCount1i;
|
||||
mediump int _paddingA_;
|
||||
mediump int _paddingB_;
|
||||
mediump int _paddingC_;
|
||||
DynamicLight u_dynamicLightArray[12];
|
||||
};
|
||||
#endif
|
||||
|
||||
layout(std140) uniform u_worldLightingData {
|
||||
mediump vec4 u_sunDirection4f;
|
||||
mediump vec4 u_sunColor3f_sky1f;
|
||||
mediump vec4 u_fogParameters4f;
|
||||
mediump vec4 u_fogColorLight4f;
|
||||
mediump vec4 u_fogColorDark4f;
|
||||
mediump vec4 u_fogColorAddSun4f;
|
||||
mediump vec4 u_blockSkySunDynamicLightFac4f;
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD0
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 1.0
|
||||
#endif
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD1
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
mediump mat4 u_sunShadowMatrixLOD14f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 0.5
|
||||
#endif
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD2
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
mediump mat4 u_sunShadowMatrixLOD14f;
|
||||
mediump mat4 u_sunShadowMatrixLOD24f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 0.3333333
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
uniform sampler2D u_samplerNormalMaterial;
|
||||
#else
|
||||
uniform vec3 u_materialConstants3f;
|
||||
#endif
|
||||
|
||||
uniform sampler2D u_metalsLUT;
|
||||
|
||||
#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION
|
||||
#define LIB_INCLUDE_PBR_LIGHTING_PREFETCH
|
||||
#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl"
|
||||
|
||||
#ifdef COMPILE_PARABOLOID
|
||||
#undef COMPILE_SUN_SHADOW_SMOOTH
|
||||
#undef COMPILE_SUN_SHADOW_LOD1
|
||||
#undef COMPILE_SUN_SHADOW_LOD2
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_PARABOLOID_ENV_MAP
|
||||
uniform sampler2D u_environmentMap;
|
||||
uniform sampler2D u_brdfLUT;
|
||||
#define LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_SPECULAR
|
||||
#define LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_PREFETCH
|
||||
#endif
|
||||
|
||||
uniform sampler2D u_irradianceMap;
|
||||
|
||||
#ifdef COMPILE_FOG_LIGHT_SHAFTS
|
||||
uniform sampler2D u_lightShaftsTexture;
|
||||
#endif
|
||||
|
||||
#EAGLER INCLUDE (4) "eagler:glsl/deferred/lib/pbr_env_map.glsl"
|
||||
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
uniform sampler2DShadow u_sunShadowDepthTexture;
|
||||
#ifdef COMPILE_SUN_SHADOW_SMOOTH
|
||||
const vec2 POISSON_DISK[7] = vec2[](
|
||||
vec2(-0.077, 0.995), vec2(0.998, 0.015),
|
||||
vec2(-0.116, -0.987), vec2(-0.916, 0.359),
|
||||
vec2(-0.697, -0.511), vec2(0.740, -0.612),
|
||||
vec2(0.675, 0.682));
|
||||
#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0
|
||||
#define SMOOTH_SHADOW_RADIUS 0.00075
|
||||
#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\
|
||||
tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\
|
||||
tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\
|
||||
tmpVec2.y += lod;\
|
||||
tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\
|
||||
accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
void main() {
|
||||
vec4 worldPosition4f;
|
||||
vec4 worldDirection4f;
|
||||
vec4 diffuseColor4f;
|
||||
vec3 normalVector3f;
|
||||
vec2 lightmapCoords2f;
|
||||
vec3 materialData3f;
|
||||
float block1f;
|
||||
|
||||
// =========== RESOLVE CONSTANTS ============ //
|
||||
|
||||
worldPosition4f = u_inverseViewMatrix4f * v_position4f;
|
||||
worldPosition4f.xyz /= worldPosition4f.w;
|
||||
worldPosition4f.w = 1.0;
|
||||
worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0);
|
||||
worldDirection4f.xyz = normalize(worldDirection4f.xyz);
|
||||
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
lightmapCoords2f = v_lightmap2f;
|
||||
#else
|
||||
lightmapCoords2f = u_textureCoords02;
|
||||
#endif
|
||||
#else
|
||||
lightmapCoords2f = vec2(0.0, 1.0);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
normalVector3f = normalize(v_normal3f);
|
||||
block1f = v_block1f;
|
||||
#else
|
||||
normalVector3f = u_uniformNormal3f;
|
||||
block1f = u_blockConstant1f;
|
||||
#endif
|
||||
|
||||
normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f);
|
||||
|
||||
// ========= CALCULATE DIFFUSE COLOR ========== //
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
diffuseColor4f = v_color4f * u_color4f;
|
||||
#else
|
||||
diffuseColor4f = u_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
vec2 texCoords2f;
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
vec4 tmpVec4 = vec4(v_objectPosition3f, 1.0);
|
||||
vec4 texGenVector;
|
||||
texGenVector.x = dot(u_texGenPlane4i.x == 1 ? v_position4f : tmpVec4, u_texGenS4f);
|
||||
texGenVector.y = dot(u_texGenPlane4i.y == 1 ? v_position4f : tmpVec4, u_texGenT4f);
|
||||
texGenVector.z = dot(u_texGenPlane4i.z == 1 ? v_position4f : tmpVec4, u_texGenR4f);
|
||||
texGenVector.w = dot(u_texGenPlane4i.w == 1 ? v_position4f : tmpVec4, u_texGenQ4f);
|
||||
texGenVector.xyz = mat4x3(
|
||||
u_textureMat4f01[0].xyw,
|
||||
u_textureMat4f01[1].xyw,
|
||||
u_textureMat4f01[2].xyw,
|
||||
u_textureMat4f01[3].xyw
|
||||
) * texGenVector;
|
||||
texCoords2f = texGenVector.xy / texGenVector.z;
|
||||
#else
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
|
||||
texCoords2f = floor(v_texture2f * u_textureAnisotropicFix) + 0.5;
|
||||
texCoords2f /= u_textureAnisotropicFix;
|
||||
#else
|
||||
texCoords2f = v_texture2f;
|
||||
#endif
|
||||
#else
|
||||
texCoords2f = u_textureCoords01;
|
||||
#endif
|
||||
#endif
|
||||
diffuseColor4f *= texture(u_samplerTexture, texCoords2f);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_BLEND_ADD
|
||||
diffuseColor4f = diffuseColor4f * u_colorBlendSrc4f + u_colorBlendAdd4f;
|
||||
#endif
|
||||
|
||||
// ============= ALPHA TEST ============== //
|
||||
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
if(diffuseColor4f.a < u_alphaTestRef1f) discard;
|
||||
#endif
|
||||
|
||||
// ========== RESOLVE MATERIALS =========== //
|
||||
|
||||
#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
vec2 uv2 = vec2(1.0, 0.5) * texCoords2f;
|
||||
uv2.y += 0.5;
|
||||
materialData3f = texture(u_samplerNormalMaterial, uv2).rgb;
|
||||
#else
|
||||
materialData3f = u_materialConstants3f;
|
||||
#endif
|
||||
|
||||
vec3 metalN, metalK;
|
||||
PREFETCH_METALS(diffuseColor4f.rgb, materialData3f.g, metalN, metalK)
|
||||
|
||||
// ============ SUN LIGHTING ============== //
|
||||
|
||||
diffuseColor4f.rgb *= diffuseColor4f.rgb;
|
||||
|
||||
vec3 lightColor3f = vec3(0.0);
|
||||
if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 &&
|
||||
(u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) {
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
|
||||
// ========== SUN SHADOW: LOD0 ============ //
|
||||
|
||||
float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
|
||||
float shadowSample = 1.0;
|
||||
vec4 shadowWorldPos4f = worldPosition4f;
|
||||
shadowWorldPos4f.xyz += normalVector3f * 0.05;
|
||||
|
||||
vec4 shadowTexPos4f;
|
||||
vec2 tmpVec2;
|
||||
for(;;) {
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0);
|
||||
#ifdef COMPILE_SUN_SHADOW_SMOOTH
|
||||
shadowSample *= SMOOTH_SHADOW_SAMPLES;
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
shadowSample = max(shadowSample * 2.0 - 1.0, 0.0);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2)
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 1.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD2
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 2.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
lightColor3f *= shadowSample * skyLight;
|
||||
#endif
|
||||
lightColor3f = eaglercraftLighting(diffuseColor4f.rgb, lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalVector3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.z;
|
||||
}
|
||||
|
||||
float f;
|
||||
#ifdef COMPILE_PARABOLOID_ENV_MAP
|
||||
|
||||
// =========== ENVIRONMENT MAP =========== //
|
||||
|
||||
f = materialData3f.g < 0.06 ? 1.0 : 0.0;
|
||||
f += materialData3f.r < 0.5 ? 1.0 : 0.0;
|
||||
while(f == 0.0) {
|
||||
float dst2 = dot(worldPosition4f.xyz, worldPosition4f.xyz);
|
||||
if(dst2 > 16.0) {
|
||||
break;
|
||||
}
|
||||
vec3 reflectDir = reflect(worldDirection4f.xyz, normalVector3f);
|
||||
reflectDir.xz /= abs(reflectDir.y) + 1.0;
|
||||
float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz);
|
||||
dst *= dst;
|
||||
reflectDir.xz = reflectDir.xz * 0.975;
|
||||
vec4 envMapSample4f;
|
||||
if(dst < 0.005) {
|
||||
vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
|
||||
vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a));
|
||||
}else {
|
||||
reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25);
|
||||
reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75);
|
||||
envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0);
|
||||
}
|
||||
if(envMapSample4f.a > 0.0) {
|
||||
lightColor3f += eaglercraftIBL_Specular(diffuseColor4f.rgb, envMapSample4f.rgb, worldDirection4f.xyz, normalVector3f, materialData3f, metalN, metalK) * (1.0 - sqrt(dst2) * 0.25);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// =========== IRRADIANCE MAP =========== //
|
||||
|
||||
lightmapCoords2f *= lightmapCoords2f;
|
||||
|
||||
vec3 irradianceMapSamplePos2f = normalVector3f;
|
||||
irradianceMapSamplePos2f.xz /= abs(irradianceMapSamplePos2f.y) + 1.0;
|
||||
float dst = 1.0 - dot(irradianceMapSamplePos2f.xz, irradianceMapSamplePos2f.xz);
|
||||
dst *= dst;
|
||||
irradianceMapSamplePos2f.xz *= 0.975;
|
||||
vec3 skyLight = vec3(sqrt(0.01 + max(u_sunDirection4f.w, 0.0)));
|
||||
if(dst < 0.005) {
|
||||
vec4 sample1 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
|
||||
vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb;
|
||||
}else {
|
||||
irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25);
|
||||
irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75);
|
||||
skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb;
|
||||
}
|
||||
skyLight *= lightmapCoords2f.g * u_sunColor3f_sky1f.w;
|
||||
|
||||
#ifdef COMPILE_DYNAMIC_LIGHTS
|
||||
|
||||
// =========== DYNAMIC LIGHTING =========== //
|
||||
|
||||
vec3 dlightDist3f, dlightDir3f, dlightColor3f;
|
||||
int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this
|
||||
for(int i = 0; i < safeLightCount; ++i) {
|
||||
dlightDist3f = worldPosition4f.xyz - u_dynamicLightArray[i].u_lightPosition4f.xyz;
|
||||
dlightDir3f = normalize(dlightDist3f);
|
||||
dlightDir3f = materialData3f.b == 1.0 ? normalVector3f : -dlightDir3f;
|
||||
if(dot(dlightDir3f, normalVector3f) <= 0.0) {
|
||||
continue;
|
||||
}
|
||||
dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f);
|
||||
if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) {
|
||||
continue;
|
||||
}
|
||||
lightColor3f += eaglercraftLighting(diffuseColor4f.rgb, dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.w;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// ============ CACLULATE FOG ============= //
|
||||
|
||||
vec4 fogBlend4f = vec4(0.0);
|
||||
#ifndef COMPILE_ENABLE_TEX_GEN
|
||||
while(u_fogParameters4f.x > 0.0) {
|
||||
float atmos = u_fogParameters4f.x >= 4.0 ? 4.0 : 0.0;
|
||||
float type = u_fogParameters4f.x - atmos;
|
||||
fogBlend4f = mix(u_fogColorLight4f, u_fogColorDark4f, lightmapCoords2f.g);
|
||||
|
||||
float l = length(v_position4f.xyz);
|
||||
if(type == 1.0) {
|
||||
f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z);
|
||||
}else {
|
||||
f = 1.0 - exp(-u_fogParameters4f.y * l);
|
||||
}
|
||||
|
||||
fogBlend4f.a *= clamp(f, 0.0, 1.0);
|
||||
|
||||
if(atmos == 0.0) {
|
||||
break;
|
||||
}
|
||||
|
||||
vec3 atmosSamplePos = v_position4f.xyz / -l;
|
||||
atmosSamplePos.xz /= abs(atmosSamplePos.y) + 1.0;
|
||||
atmosSamplePos.xz *= vec2(-0.5, -0.25) * 0.75;
|
||||
atmosSamplePos.xz += vec2(0.5, 0.25);
|
||||
|
||||
fogBlend4f.rgb *= textureLod(u_irradianceMap, atmosSamplePos.xz, 0.0).rgb;
|
||||
|
||||
#ifdef COMPILE_FOG_LIGHT_SHAFTS
|
||||
fogBlend4f.rgb *= pow(textureLod(u_lightShaftsTexture, v_positionClip2f * 0.5 + 0.5, 0.0).r * 0.9 + 0.1, 2.25);
|
||||
fogBlend4f.a = fogBlend4f.a * 0.9 + 0.1;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
// ============ OUTPUT COLOR ============== //
|
||||
|
||||
vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0 * u_blockSkySunDynamicLightFac4f.x;
|
||||
skyLight *= u_blockSkySunDynamicLightFac4f.y;
|
||||
float emissive = materialData3f.b == 1.0 ? 0.0 : materialData3f.b;
|
||||
diffuseColor4f.rgb *= max(skyLight + blockLight, vec3(emissive * emissive * 20.0 + 0.075)) * 0.075;
|
||||
diffuseColor4f.rgb += lightColor3f;
|
||||
|
||||
diffuseColor4f.rgb = mix(diffuseColor4f.rgb, fogBlend4f.rgb, fogBlend4f.a);
|
||||
|
||||
output4f = vec4(diffuseColor4f.rgb * diffuseColor4f.a, diffuseColor4f.a);
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision highp sampler2DShadow;
|
||||
|
||||
in vec4 v_position4f;
|
||||
|
||||
#ifdef COMPILE_FOG_LIGHT_SHAFTS
|
||||
in vec2 v_positionClip2f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
in vec2 v_texture2f;
|
||||
#endif
|
||||
|
||||
uniform vec4 u_color4f;
|
||||
|
||||
#ifdef COMPILE_BLEND_ADD
|
||||
uniform vec4 u_colorBlendSrc4f;
|
||||
uniform vec4 u_colorBlendAdd4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
in vec4 v_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
in vec3 v_normal3f;
|
||||
in float v_block1f;
|
||||
#else
|
||||
uniform vec3 u_uniformNormal3f;
|
||||
uniform float u_blockConstant1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
in vec2 v_lightmap2f;
|
||||
#else
|
||||
uniform vec2 u_textureCoords02;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
uniform sampler2D u_samplerTexture;
|
||||
#ifndef COMPILE_TEXTURE_ATTRIB
|
||||
uniform vec2 u_textureCoords01;
|
||||
#endif
|
||||
#else
|
||||
#undef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
in vec3 v_objectPosition3f;
|
||||
uniform ivec4 u_texGenPlane4i;
|
||||
uniform vec4 u_texGenS4f;
|
||||
uniform vec4 u_texGenT4f;
|
||||
uniform vec4 u_texGenR4f;
|
||||
uniform vec4 u_texGenQ4f;
|
||||
uniform mat4 u_textureMat4f01;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
uniform float u_alphaTestRef1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
|
||||
uniform vec2 u_textureAnisotropicFix;
|
||||
#endif
|
||||
|
||||
uniform mat4 u_inverseViewMatrix4f;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
#ifdef COMPILE_DYNAMIC_LIGHTS
|
||||
struct DynamicLight {
|
||||
mediump vec4 u_lightPosition4f;
|
||||
mediump vec4 u_lightColor4f;
|
||||
};
|
||||
layout(std140) uniform u_chunkLightingData {
|
||||
mediump int u_dynamicLightCount1i;
|
||||
mediump int _paddingA_;
|
||||
mediump int _paddingB_;
|
||||
mediump int _paddingC_;
|
||||
DynamicLight u_dynamicLightArray[12];
|
||||
};
|
||||
#endif
|
||||
|
||||
layout(std140) uniform u_worldLightingData {
|
||||
mediump vec4 u_sunDirection4f;
|
||||
mediump vec4 u_sunColor3f_sky1f;
|
||||
mediump vec4 u_fogParameters4f;
|
||||
mediump vec4 u_fogColorLight4f;
|
||||
mediump vec4 u_fogColorDark4f;
|
||||
mediump vec4 u_fogColorAddSun4f;
|
||||
mediump vec4 u_blockSkySunDynamicLightFac4f;
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD0
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 1.0
|
||||
#endif
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD1
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
mediump mat4 u_sunShadowMatrixLOD14f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 0.5
|
||||
#endif
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD2
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
mediump mat4 u_sunShadowMatrixLOD14f;
|
||||
mediump mat4 u_sunShadowMatrixLOD24f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 0.3333333
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
uniform sampler2D u_samplerNormalMaterial;
|
||||
#else
|
||||
uniform vec3 u_materialConstants3f;
|
||||
#endif
|
||||
|
||||
uniform sampler2D u_metalsLUT;
|
||||
|
||||
#define LIB_INCLUDE_PBR_LIGHTING_FUNCTION
|
||||
#define LIB_INCLUDE_PBR_LIGHTING_PREFETCH
|
||||
#EAGLER INCLUDE (3) "eagler:glsl/deferred/lib/pbr_lighting.glsl"
|
||||
|
||||
#ifdef COMPILE_PARABOLOID
|
||||
#undef COMPILE_SUN_SHADOW_SMOOTH
|
||||
#undef COMPILE_SUN_SHADOW_LOD1
|
||||
#undef COMPILE_SUN_SHADOW_LOD2
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_PARABOLOID_ENV_MAP
|
||||
uniform sampler2D u_environmentMap;
|
||||
uniform sampler2D u_brdfLUT;
|
||||
#define LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_SPECULAR
|
||||
#define LIB_INCLUDE_PBR_IMAGE_BASED_LIGHTING_PREFETCH
|
||||
#endif
|
||||
|
||||
uniform sampler2D u_irradianceMap;
|
||||
|
||||
#ifdef COMPILE_FOG_LIGHT_SHAFTS
|
||||
uniform sampler2D u_lightShaftsTexture;
|
||||
#endif
|
||||
|
||||
#EAGLER INCLUDE (4) "eagler:glsl/deferred/lib/pbr_env_map.glsl"
|
||||
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
uniform sampler2DShadow u_sunShadowDepthTexture;
|
||||
#ifdef COMPILE_SUN_SHADOW_SMOOTH
|
||||
const vec2 POISSON_DISK[7] = vec2[](
|
||||
vec2(-0.077, 0.995), vec2(0.998, 0.015),
|
||||
vec2(-0.116, -0.987), vec2(-0.916, 0.359),
|
||||
vec2(-0.697, -0.511), vec2(0.740, -0.612),
|
||||
vec2(0.675, 0.682));
|
||||
#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0
|
||||
#define SMOOTH_SHADOW_RADIUS 0.00075
|
||||
#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\
|
||||
tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\
|
||||
tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\
|
||||
tmpVec2.y += lod;\
|
||||
tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\
|
||||
accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
void main() {
|
||||
vec4 worldPosition4f;
|
||||
vec4 worldDirection4f;
|
||||
vec4 diffuseColor4f;
|
||||
vec3 normalVector3f;
|
||||
vec2 lightmapCoords2f;
|
||||
vec3 materialData3f;
|
||||
float block1f;
|
||||
|
||||
// =========== RESOLVE CONSTANTS ============ //
|
||||
|
||||
worldPosition4f = u_inverseViewMatrix4f * v_position4f;
|
||||
worldPosition4f.xyz /= worldPosition4f.w;
|
||||
worldPosition4f.w = 1.0;
|
||||
worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0);
|
||||
worldDirection4f.xyz = normalize(worldDirection4f.xyz);
|
||||
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
lightmapCoords2f = v_lightmap2f;
|
||||
#else
|
||||
lightmapCoords2f = u_textureCoords02;
|
||||
#endif
|
||||
#else
|
||||
lightmapCoords2f = vec2(0.0, 1.0);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
normalVector3f = v_normal3f;
|
||||
block1f = round(v_block1f);
|
||||
#else
|
||||
normalVector3f = u_uniformNormal3f;
|
||||
block1f = u_blockConstant1f;
|
||||
#endif
|
||||
|
||||
normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f);
|
||||
|
||||
// ========= CALCULATE DIFFUSE COLOR ========== //
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
diffuseColor4f = v_color4f * u_color4f;
|
||||
#else
|
||||
diffuseColor4f = u_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEXTURE2D
|
||||
vec2 texCoords2f;
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
vec4 tmpVec4 = vec4(v_objectPosition3f, 1.0);
|
||||
vec4 texGenVector;
|
||||
texGenVector.x = dot(u_texGenPlane4i.x == 1 ? v_position4f : tmpVec4, u_texGenS4f);
|
||||
texGenVector.y = dot(u_texGenPlane4i.y == 1 ? v_position4f : tmpVec4, u_texGenT4f);
|
||||
texGenVector.z = dot(u_texGenPlane4i.z == 1 ? v_position4f : tmpVec4, u_texGenR4f);
|
||||
texGenVector.w = dot(u_texGenPlane4i.w == 1 ? v_position4f : tmpVec4, u_texGenQ4f);
|
||||
texGenVector.xyz = mat4x3(
|
||||
u_textureMat4f01[0].xyw,
|
||||
u_textureMat4f01[1].xyw,
|
||||
u_textureMat4f01[2].xyw,
|
||||
u_textureMat4f01[3].xyw
|
||||
) * texGenVector;
|
||||
texCoords2f = texGenVector.xy / texGenVector.z;
|
||||
#else
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
#ifdef COMPILE_ENABLE_ANISOTROPIC_FIX
|
||||
texCoords2f = floor(v_texture2f * u_textureAnisotropicFix) + 0.5;
|
||||
texCoords2f /= u_textureAnisotropicFix;
|
||||
#else
|
||||
texCoords2f = v_texture2f;
|
||||
#endif
|
||||
#else
|
||||
texCoords2f = u_textureCoords01;
|
||||
#endif
|
||||
#endif
|
||||
diffuseColor4f *= texture(u_samplerTexture, texCoords2f);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_BLEND_ADD
|
||||
diffuseColor4f = diffuseColor4f * u_colorBlendSrc4f + u_colorBlendAdd4f;
|
||||
#endif
|
||||
|
||||
// ============= ALPHA TEST ============== //
|
||||
|
||||
#ifdef COMPILE_ENABLE_ALPHA_TEST
|
||||
if(diffuseColor4f.a < u_alphaTestRef1f) discard;
|
||||
#endif
|
||||
|
||||
// ========== RESOLVE MATERIALS =========== //
|
||||
|
||||
#ifdef COMPILE_NORMAL_MATERIAL_TEXTURE
|
||||
vec2 uv2 = vec2(1.0, 0.5) * texCoords2f;
|
||||
uv2.y += 0.5;
|
||||
materialData3f = texture(u_samplerNormalMaterial, uv2).rgb;
|
||||
#else
|
||||
materialData3f = u_materialConstants3f;
|
||||
#endif
|
||||
|
||||
vec3 metalN, metalK;
|
||||
PREFETCH_METALS(diffuseColor4f.rgb, materialData3f.g, metalN, metalK)
|
||||
|
||||
// ============ SUN LIGHTING ============== //
|
||||
|
||||
diffuseColor4f.rgb *= diffuseColor4f.rgb;
|
||||
|
||||
vec3 lightColor3f = vec3(0.0);
|
||||
if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 &&
|
||||
(u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) {
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
|
||||
// ========== SUN SHADOW: LOD0 ============ //
|
||||
|
||||
float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
|
||||
float shadowSample = 1.0;
|
||||
vec4 shadowWorldPos4f = worldPosition4f;
|
||||
shadowWorldPos4f.xyz += normalVector3f * 0.05;
|
||||
|
||||
vec4 shadowTexPos4f;
|
||||
vec2 tmpVec2;
|
||||
for(;;) {
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0);
|
||||
#ifdef COMPILE_SUN_SHADOW_SMOOTH
|
||||
shadowSample *= SMOOTH_SHADOW_SAMPLES;
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
shadowSample = max(shadowSample * 2.0 - 1.0, 0.0);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2)
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 1.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD2
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 2.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
lightColor3f *= shadowSample * skyLight;
|
||||
#endif
|
||||
lightColor3f = eaglercraftLighting(diffuseColor4f.rgb, lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalVector3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.z;
|
||||
}
|
||||
|
||||
float f;
|
||||
#ifdef COMPILE_PARABOLOID_ENV_MAP
|
||||
|
||||
// =========== ENVIRONMENT MAP =========== //
|
||||
|
||||
f = materialData3f.g < 0.06 ? 1.0 : 0.0;
|
||||
f += materialData3f.r < 0.5 ? 1.0 : 0.0;
|
||||
while(f == 0.0) {
|
||||
float dst2 = dot(worldPosition4f.xyz, worldPosition4f.xyz);
|
||||
if(dst2 > 16.0) {
|
||||
break;
|
||||
}
|
||||
vec3 reflectDir = reflect(worldDirection4f.xyz, normalVector3f);
|
||||
reflectDir.xz /= abs(reflectDir.y) + 1.0;
|
||||
float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz);
|
||||
dst *= dst;
|
||||
reflectDir.xz = reflectDir.xz * 0.975;
|
||||
vec4 envMapSample4f;
|
||||
if(dst < 0.005) {
|
||||
vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
|
||||
vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a));
|
||||
}else {
|
||||
reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25);
|
||||
reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75);
|
||||
envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0);
|
||||
}
|
||||
if(envMapSample4f.a > 0.0) {
|
||||
lightColor3f += eaglercraftIBL_Specular(diffuseColor4f.rgb, envMapSample4f.rgb, worldDirection4f.xyz, normalVector3f, materialData3f, metalN, metalK) * (1.0 - sqrt(dst2) * 0.25);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// =========== IRRADIANCE MAP =========== //
|
||||
|
||||
lightmapCoords2f *= lightmapCoords2f;
|
||||
|
||||
vec3 irradianceMapSamplePos2f = normalVector3f;
|
||||
irradianceMapSamplePos2f.xz /= abs(irradianceMapSamplePos2f.y) + 1.0;
|
||||
float dst = 1.0 - dot(irradianceMapSamplePos2f.xz, irradianceMapSamplePos2f.xz);
|
||||
dst *= dst;
|
||||
irradianceMapSamplePos2f.xz *= 0.975;
|
||||
vec3 skyLight = vec3(sqrt(0.01 + max(u_sunDirection4f.w, 0.0)));
|
||||
if(dst < 0.005) {
|
||||
vec4 sample1 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
|
||||
vec4 sample2 = textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
skyLight += mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, irradianceMapSamplePos2f.y * -12.5 + 0.5)).rgb;
|
||||
}else {
|
||||
irradianceMapSamplePos2f.xz *= vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : -0.25);
|
||||
irradianceMapSamplePos2f.xz += vec2(0.5, irradianceMapSamplePos2f.y > 0.0 ? 0.25 : 0.75);
|
||||
skyLight += textureLod(u_irradianceMap, irradianceMapSamplePos2f.xz, 0.0).rgb;
|
||||
}
|
||||
skyLight *= lightmapCoords2f.g * u_sunColor3f_sky1f.w;
|
||||
|
||||
#ifdef COMPILE_DYNAMIC_LIGHTS
|
||||
|
||||
// =========== DYNAMIC LIGHTING =========== //
|
||||
|
||||
vec3 dlightDist3f, dlightDir3f, dlightColor3f;
|
||||
int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this
|
||||
for(int i = 0; i < safeLightCount; ++i) {
|
||||
dlightDist3f = worldPosition4f.xyz - u_dynamicLightArray[i].u_lightPosition4f.xyz;
|
||||
dlightDir3f = normalize(dlightDist3f);
|
||||
dlightDir3f = materialData3f.b == 1.0 ? normalVector3f : -dlightDir3f;
|
||||
if(dot(dlightDir3f, normalVector3f) <= 0.0) {
|
||||
continue;
|
||||
}
|
||||
dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f);
|
||||
if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) {
|
||||
continue;
|
||||
}
|
||||
lightColor3f += eaglercraftLighting(diffuseColor4f.rgb, dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f, materialData3f, metalN, metalK) * u_blockSkySunDynamicLightFac4f.w;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// ============ CACLULATE FOG ============= //
|
||||
|
||||
vec4 fogBlend4f = vec4(0.0);
|
||||
#ifndef COMPILE_ENABLE_TEX_GEN
|
||||
while(u_fogParameters4f.x > 0.0) {
|
||||
float atmos = u_fogParameters4f.x >= 4.0 ? 4.0 : 0.0;
|
||||
float type = u_fogParameters4f.x - atmos;
|
||||
fogBlend4f = mix(u_fogColorLight4f, u_fogColorDark4f, lightmapCoords2f.g);
|
||||
|
||||
float l = length(v_position4f.xyz);
|
||||
if(type == 1.0) {
|
||||
f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z);
|
||||
}else {
|
||||
f = 1.0 - exp(-u_fogParameters4f.y * l);
|
||||
}
|
||||
|
||||
fogBlend4f.a *= clamp(f, 0.0, 1.0);
|
||||
|
||||
if(atmos == 0.0) {
|
||||
break;
|
||||
}
|
||||
|
||||
vec3 atmosSamplePos = v_position4f.xyz / -l;
|
||||
atmosSamplePos.xz /= abs(atmosSamplePos.y) + 1.0;
|
||||
atmosSamplePos.xz *= vec2(-0.5, -0.25) * 0.75;
|
||||
atmosSamplePos.xz += vec2(0.5, 0.25);
|
||||
|
||||
fogBlend4f.rgb *= textureLod(u_irradianceMap, atmosSamplePos.xz, 0.0).rgb;
|
||||
|
||||
#ifdef COMPILE_FOG_LIGHT_SHAFTS
|
||||
fogBlend4f.rgb *= pow(textureLod(u_lightShaftsTexture, v_positionClip2f * 0.5 + 0.5, 0.0).r * 0.9 + 0.1, 2.25);
|
||||
fogBlend4f.a = fogBlend4f.a * 0.9 + 0.1;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
// ============ OUTPUT COLOR ============== //
|
||||
|
||||
vec3 blockLight = lightmapCoords2f.r * vec3(1.0, 0.5809, 0.2433) * 2.0 * u_blockSkySunDynamicLightFac4f.x;
|
||||
skyLight *= u_blockSkySunDynamicLightFac4f.y;
|
||||
float emissive = materialData3f.b == 1.0 ? 0.0 : materialData3f.b;
|
||||
diffuseColor4f.rgb *= max(skyLight + blockLight, vec3(emissive * emissive * 20.0 + 0.075)) * 0.075;
|
||||
diffuseColor4f.rgb += lightColor3f;
|
||||
|
||||
diffuseColor4f.rgb = mix(diffuseColor4f.rgb, fogBlend4f.rgb, fogBlend4f.a);
|
||||
|
||||
output4f = vec4(diffuseColor4f.rgb * diffuseColor4f.a, diffuseColor4f.a);
|
||||
}
|
||||
|
@ -1,103 +1,103 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
in vec3 a_position3f;
|
||||
|
||||
out vec4 v_position4f;
|
||||
|
||||
#ifdef COMPILE_FOG_LIGHT_SHAFTS
|
||||
out vec2 v_positionClip2f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
in vec2 a_texture2f;
|
||||
out vec2 v_texture2f;
|
||||
uniform mat4 u_textureMat4f01;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
out vec3 v_objectPosition3f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
in vec4 a_color4f;
|
||||
out vec4 v_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
in vec4 a_normal4f;
|
||||
out vec3 v_normal3f;
|
||||
out float v_block1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
in vec2 a_lightmap2f;
|
||||
out vec2 v_lightmap2f;
|
||||
uniform mat4 u_textureMat4f02;
|
||||
#endif
|
||||
|
||||
uniform mat4 u_modelviewMat4f;
|
||||
|
||||
#ifdef COMPILE_PARABOLOID
|
||||
uniform float u_farPlane1f;
|
||||
#else
|
||||
uniform mat4 u_projectionMat4f;
|
||||
#endif
|
||||
|
||||
#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
|
||||
|
||||
void main() {
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
v_objectPosition3f = a_position3f;
|
||||
#endif
|
||||
v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0);
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0);
|
||||
v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
v_color4f = a_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz);
|
||||
v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0);
|
||||
v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_PARABOLOID
|
||||
vec3 pos = v_position4f.xyz / v_position4f.w;
|
||||
float dist = pos.z;
|
||||
pos.xyz = normalize(pos.xyz);
|
||||
pos.xy /= 1.0 - pos.z;
|
||||
pos.z = dist / u_farPlane1f + 1.00005;
|
||||
gl_Position = vec4(pos.xyz, 1.0);
|
||||
#else
|
||||
gl_Position = u_projectionMat4f * v_position4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_FOG_LIGHT_SHAFTS
|
||||
v_positionClip2f = gl_Position.xy / gl_Position.w;
|
||||
#endif
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
in vec3 a_position3f;
|
||||
|
||||
out vec4 v_position4f;
|
||||
|
||||
#ifdef COMPILE_FOG_LIGHT_SHAFTS
|
||||
out vec2 v_positionClip2f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
in vec2 a_texture2f;
|
||||
out vec2 v_texture2f;
|
||||
uniform mat4 u_textureMat4f01;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
out vec3 v_objectPosition3f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
in vec4 a_color4f;
|
||||
out vec4 v_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
in vec4 a_normal4f;
|
||||
out vec3 v_normal3f;
|
||||
out float v_block1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
in vec2 a_lightmap2f;
|
||||
out vec2 v_lightmap2f;
|
||||
uniform mat4 u_textureMat4f02;
|
||||
#endif
|
||||
|
||||
uniform mat4 u_modelviewMat4f;
|
||||
|
||||
#ifdef COMPILE_PARABOLOID
|
||||
uniform float u_farPlane1f;
|
||||
#else
|
||||
uniform mat4 u_projectionMat4f;
|
||||
#endif
|
||||
|
||||
#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
|
||||
|
||||
void main() {
|
||||
#ifdef COMPILE_ENABLE_TEX_GEN
|
||||
v_objectPosition3f = a_position3f;
|
||||
#endif
|
||||
v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0);
|
||||
|
||||
#ifdef COMPILE_TEXTURE_ATTRIB
|
||||
vec3 v_textureTmp3f = TEX_MAT3(u_textureMat4f01) * vec3(a_texture2f, 1.0);
|
||||
v_texture2f = v_textureTmp3f.xy / v_textureTmp3f.z;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_COLOR_ATTRIB
|
||||
v_color4f = a_color4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz);
|
||||
v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0);
|
||||
v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_PARABOLOID
|
||||
vec3 pos = v_position4f.xyz / v_position4f.w;
|
||||
float dist = pos.z;
|
||||
pos.xyz = normalize(pos.xyz);
|
||||
pos.xy /= 1.0 - pos.z;
|
||||
pos.z = dist / u_farPlane1f + 1.00005;
|
||||
gl_Position = vec4(pos.xyz, 1.0);
|
||||
#else
|
||||
gl_Position = u_projectionMat4f * v_position4f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_FOG_LIGHT_SHAFTS
|
||||
v_positionClip2f = gl_Position.xy / gl_Position.w;
|
||||
#endif
|
||||
}
|
||||
|
@ -1,308 +1,308 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision highp sampler2DShadow;
|
||||
|
||||
in vec4 v_position4f;
|
||||
|
||||
uniform vec4 u_color4f;
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
in vec3 v_normal3f;
|
||||
in float v_block1f;
|
||||
#else
|
||||
uniform vec3 u_uniformNormal3f;
|
||||
uniform float u_blockConstant1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
in vec2 v_lightmap2f;
|
||||
#else
|
||||
uniform vec2 u_textureCoords02;
|
||||
#endif
|
||||
|
||||
uniform mat4 u_inverseViewMatrix4f;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
#ifdef COMPILE_DYNAMIC_LIGHTS
|
||||
struct DynamicLight {
|
||||
mediump vec4 u_lightPosition4f;
|
||||
mediump vec4 u_lightColor4f;
|
||||
};
|
||||
layout(std140) uniform u_chunkLightingData {
|
||||
mediump int u_dynamicLightCount1i;
|
||||
mediump int _paddingA_;
|
||||
mediump int _paddingB_;
|
||||
mediump int _paddingC_;
|
||||
DynamicLight u_dynamicLightArray[12];
|
||||
};
|
||||
#endif
|
||||
|
||||
layout(std140) uniform u_worldLightingData {
|
||||
mediump vec4 u_sunDirection4f;
|
||||
mediump vec4 u_sunColor3f_sky1f;
|
||||
mediump vec4 u_fogParameters4f;
|
||||
mediump vec4 u_fogColorLight4f;
|
||||
mediump vec4 u_fogColorDark4f;
|
||||
mediump vec4 u_fogColorAddSun4f;
|
||||
mediump vec4 u_blockSkySunDynamicLightFac4f;
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD0
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 1.0
|
||||
#endif
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD1
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
mediump mat4 u_sunShadowMatrixLOD14f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 0.5
|
||||
#endif
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD2
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
mediump mat4 u_sunShadowMatrixLOD14f;
|
||||
mediump mat4 u_sunShadowMatrixLOD24f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 0.3333333
|
||||
#endif
|
||||
};
|
||||
|
||||
uniform sampler2D u_environmentMap;
|
||||
uniform sampler2D u_brdfLUT;
|
||||
|
||||
#define GLASS_ROUGHNESS 0.15
|
||||
#define GLASS_F0 0.4
|
||||
|
||||
vec3 eaglercraftLighting_Glass(in vec3 radiance, in vec3 viewDir, in vec3 lightDir, in vec3 normalVec) {
|
||||
float roughness = 1.0 - GLASS_ROUGHNESS * 0.85;
|
||||
vec3 H = normalize(viewDir + lightDir);
|
||||
vec3 NdotHVL = max(normalVec * mat3(H, viewDir, lightDir), vec3(0.0));
|
||||
float NDF = (GLASS_ROUGHNESS * GLASS_ROUGHNESS * GLASS_ROUGHNESS * GLASS_ROUGHNESS);
|
||||
float denom = NdotHVL.x * NdotHVL.x * (NDF - 1.0) + 1.0;
|
||||
NDF /= denom * denom * 3.141592;
|
||||
float gs = GLASS_ROUGHNESS + 1.0;
|
||||
gs *= gs * 0.125;
|
||||
vec2 Ndot = NdotHVL.yz;
|
||||
Ndot /= Ndot * (1.0 - gs) + gs;
|
||||
NDF *= Ndot.x * Ndot.y;
|
||||
float fresnel = pow(max(1.0 - NdotHVL.x, 0.0), 5.0);
|
||||
vec3 F = vec3(GLASS_F0 + (1.0 - GLASS_F0) * fresnel);
|
||||
denom = 4.0 * NdotHVL.y * NdotHVL.z + 0.0001;
|
||||
return (NDF * F / denom) * radiance * NdotHVL.z;
|
||||
}
|
||||
|
||||
vec3 eaglercraftIBL_Specular_Glass(in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec) {
|
||||
float NdotV = dot(normalVec, -viewDir);
|
||||
float fresnel = pow(max(1.0 - NdotV, 0.0), 5.0);
|
||||
vec3 F = vec3(GLASS_F0 + (max(1.0 - GLASS_ROUGHNESS, GLASS_F0) - GLASS_F0) * fresnel);
|
||||
vec2 brdf2f = vec2(max(NdotV, 0.0), GLASS_ROUGHNESS);
|
||||
brdf2f = 1.0 - brdf2f;
|
||||
brdf2f *= brdf2f;
|
||||
brdf2f = 1.0 - brdf2f;
|
||||
brdf2f = textureLod(u_brdfLUT, brdf2f, 0.0).rg;
|
||||
return envMapSample * (F * brdf2f.r + brdf2f.g);
|
||||
}
|
||||
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
uniform sampler2DShadow u_sunShadowDepthTexture;
|
||||
#ifdef COMPILE_SUN_SHADOW_SMOOTH
|
||||
const vec2 POISSON_DISK[7] = vec2[](
|
||||
vec2(-0.077, 0.995), vec2(0.998, 0.015),
|
||||
vec2(-0.116, -0.987), vec2(-0.916, 0.359),
|
||||
vec2(-0.697, -0.511), vec2(0.740, -0.612),
|
||||
vec2(0.675, 0.682));
|
||||
#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0
|
||||
#define SMOOTH_SHADOW_RADIUS 0.00075
|
||||
#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\
|
||||
tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\
|
||||
tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\
|
||||
tmpVec2.y += lod;\
|
||||
tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\
|
||||
accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
void main() {
|
||||
vec4 worldPosition4f;
|
||||
vec4 worldDirection4f;
|
||||
vec3 normalVector3f;
|
||||
vec2 lightmapCoords2f;
|
||||
float block1f;
|
||||
|
||||
// =========== RESOLVE CONSTANTS ============ //
|
||||
|
||||
worldPosition4f = u_inverseViewMatrix4f * v_position4f;
|
||||
worldPosition4f.xyz /= worldPosition4f.w;
|
||||
worldPosition4f.w = 1.0;
|
||||
worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0);
|
||||
worldDirection4f.xyz = normalize(worldDirection4f.xyz);
|
||||
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
lightmapCoords2f = v_lightmap2f;
|
||||
#else
|
||||
lightmapCoords2f = u_textureCoords02;
|
||||
#endif
|
||||
#else
|
||||
lightmapCoords2f = vec2(0.0, 1.0);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
normalVector3f = normalize(v_normal3f);
|
||||
block1f = v_block1f;
|
||||
#else
|
||||
normalVector3f = u_uniformNormal3f;
|
||||
block1f = u_blockConstant1f;
|
||||
#endif
|
||||
|
||||
normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f);
|
||||
|
||||
// ============ SUN LIGHTING ============== //
|
||||
|
||||
vec3 lightColor3f = vec3(0.0);
|
||||
if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 &&
|
||||
(u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) {
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
|
||||
// ========== SUN SHADOW: LOD0 ============ //
|
||||
|
||||
float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
|
||||
float shadowSample = 1.0;
|
||||
vec4 shadowWorldPos4f = worldPosition4f;
|
||||
shadowWorldPos4f.xyz += normalVector3f * 0.05;
|
||||
|
||||
vec4 shadowTexPos4f;
|
||||
vec2 tmpVec2;
|
||||
for(;;) {
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0);
|
||||
#ifdef COMPILE_SUN_SHADOW_SMOOTH
|
||||
shadowSample *= SMOOTH_SHADOW_SAMPLES;
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
shadowSample = max(shadowSample * 2.0 - 1.0, 0.0);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2)
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 1.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD2
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 2.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
lightColor3f *= shadowSample * skyLight;
|
||||
#endif
|
||||
lightColor3f = eaglercraftLighting_Glass(lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalVector3f) * u_blockSkySunDynamicLightFac4f.z;
|
||||
}
|
||||
|
||||
// =========== ENVIRONMENT MAP =========== //
|
||||
|
||||
for(;;) {
|
||||
float dst2 = dot(worldPosition4f.xyz, worldPosition4f.xyz);
|
||||
if(dst2 > 16.0) {
|
||||
break;
|
||||
}
|
||||
vec3 reflectDir = reflect(worldDirection4f.xyz, normalVector3f);
|
||||
reflectDir.xz /= abs(reflectDir.y) + 1.0;
|
||||
float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz);
|
||||
dst *= dst;
|
||||
reflectDir.xz = reflectDir.xz * 0.975;
|
||||
vec4 envMapSample4f;
|
||||
if(dst < 0.005) {
|
||||
vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
|
||||
vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a));
|
||||
}else {
|
||||
reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25);
|
||||
reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75);
|
||||
envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0);
|
||||
}
|
||||
if(envMapSample4f.a > 0.0) {
|
||||
lightColor3f += eaglercraftIBL_Specular_Glass(envMapSample4f.rgb, worldDirection4f.xyz, normalVector3f) * (1.0 - sqrt(dst2) * 0.25);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef COMPILE_DYNAMIC_LIGHTS
|
||||
|
||||
// =========== DYNAMIC LIGHTING =========== //
|
||||
|
||||
vec3 dlightDist3f, dlightDir3f, dlightColor3f;
|
||||
int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this
|
||||
for(int i = 0; i < safeLightCount; ++i) {
|
||||
dlightDist3f = u_dynamicLightArray[i].u_lightPosition4f.xyz - worldPosition4f.xyz;
|
||||
dlightDir3f = normalize(dlightDist3f);
|
||||
if(dot(dlightDir3f, normalVector3f) <= 0.0) {
|
||||
continue;
|
||||
}
|
||||
dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f);
|
||||
if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) {
|
||||
continue;
|
||||
}
|
||||
lightColor3f += eaglercraftLighting_Glass(dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f) * u_blockSkySunDynamicLightFac4f.w;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// ============ CACLULATE FOG ============= //
|
||||
|
||||
float fogFade = 0.0;
|
||||
if(u_fogParameters4f.x > 0.0) {
|
||||
float atmos = u_fogParameters4f.x >= 4.0 ? 4.0 : 0.0;
|
||||
float type = u_fogParameters4f.x - atmos;
|
||||
fogFade = mix(u_fogColorDark4f.a, u_fogColorLight4f.a, lightmapCoords2f.g);
|
||||
|
||||
float f;
|
||||
float l = length(v_position4f.xyz);
|
||||
if(type == 1.0) {
|
||||
f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z);
|
||||
}else {
|
||||
f = 1.0 - exp(-u_fogParameters4f.y * l);
|
||||
}
|
||||
|
||||
fogFade *= clamp(f, 0.0, 1.0);
|
||||
}
|
||||
|
||||
// ============ OUTPUT COLOR ============== //
|
||||
|
||||
output4f = vec4(lightColor3f * (1.0 - fogFade), 0.1);
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision highp sampler2DShadow;
|
||||
|
||||
in vec4 v_position4f;
|
||||
|
||||
uniform vec4 u_color4f;
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
in vec3 v_normal3f;
|
||||
in float v_block1f;
|
||||
#else
|
||||
uniform vec3 u_uniformNormal3f;
|
||||
uniform float u_blockConstant1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
in vec2 v_lightmap2f;
|
||||
#else
|
||||
uniform vec2 u_textureCoords02;
|
||||
#endif
|
||||
|
||||
uniform mat4 u_inverseViewMatrix4f;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
#ifdef COMPILE_DYNAMIC_LIGHTS
|
||||
struct DynamicLight {
|
||||
mediump vec4 u_lightPosition4f;
|
||||
mediump vec4 u_lightColor4f;
|
||||
};
|
||||
layout(std140) uniform u_chunkLightingData {
|
||||
mediump int u_dynamicLightCount1i;
|
||||
mediump int _paddingA_;
|
||||
mediump int _paddingB_;
|
||||
mediump int _paddingC_;
|
||||
DynamicLight u_dynamicLightArray[12];
|
||||
};
|
||||
#endif
|
||||
|
||||
layout(std140) uniform u_worldLightingData {
|
||||
mediump vec4 u_sunDirection4f;
|
||||
mediump vec4 u_sunColor3f_sky1f;
|
||||
mediump vec4 u_fogParameters4f;
|
||||
mediump vec4 u_fogColorLight4f;
|
||||
mediump vec4 u_fogColorDark4f;
|
||||
mediump vec4 u_fogColorAddSun4f;
|
||||
mediump vec4 u_blockSkySunDynamicLightFac4f;
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD0
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 1.0
|
||||
#endif
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD1
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
mediump mat4 u_sunShadowMatrixLOD14f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 0.5
|
||||
#endif
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD2
|
||||
mediump mat4 u_sunShadowMatrixLOD04f;
|
||||
mediump mat4 u_sunShadowMatrixLOD14f;
|
||||
mediump mat4 u_sunShadowMatrixLOD24f;
|
||||
#define DO_COMPILE_SUN_SHADOWS
|
||||
#define SUN_SHADOW_MAP_FRAC 0.3333333
|
||||
#endif
|
||||
};
|
||||
|
||||
uniform sampler2D u_environmentMap;
|
||||
uniform sampler2D u_brdfLUT;
|
||||
|
||||
#define GLASS_ROUGHNESS 0.15
|
||||
#define GLASS_F0 0.4
|
||||
|
||||
vec3 eaglercraftLighting_Glass(in vec3 radiance, in vec3 viewDir, in vec3 lightDir, in vec3 normalVec) {
|
||||
float roughness = 1.0 - GLASS_ROUGHNESS * 0.85;
|
||||
vec3 H = normalize(viewDir + lightDir);
|
||||
vec3 NdotHVL = max(normalVec * mat3(H, viewDir, lightDir), vec3(0.0));
|
||||
float NDF = (GLASS_ROUGHNESS * GLASS_ROUGHNESS * GLASS_ROUGHNESS * GLASS_ROUGHNESS);
|
||||
float denom = NdotHVL.x * NdotHVL.x * (NDF - 1.0) + 1.0;
|
||||
NDF /= denom * denom * 3.141592;
|
||||
float gs = GLASS_ROUGHNESS + 1.0;
|
||||
gs *= gs * 0.125;
|
||||
vec2 Ndot = NdotHVL.yz;
|
||||
Ndot /= Ndot * (1.0 - gs) + gs;
|
||||
NDF *= Ndot.x * Ndot.y;
|
||||
float fresnel = pow(max(1.0 - NdotHVL.x, 0.0), 5.0);
|
||||
vec3 F = vec3(GLASS_F0 + (1.0 - GLASS_F0) * fresnel);
|
||||
denom = 4.0 * NdotHVL.y * NdotHVL.z + 0.0001;
|
||||
return (NDF * F / denom) * radiance * NdotHVL.z;
|
||||
}
|
||||
|
||||
vec3 eaglercraftIBL_Specular_Glass(in vec3 envMapSample, in vec3 viewDir, in vec3 normalVec) {
|
||||
float NdotV = dot(normalVec, -viewDir);
|
||||
float fresnel = pow(max(1.0 - NdotV, 0.0), 5.0);
|
||||
vec3 F = vec3(GLASS_F0 + (max(1.0 - GLASS_ROUGHNESS, GLASS_F0) - GLASS_F0) * fresnel);
|
||||
vec2 brdf2f = vec2(max(NdotV, 0.0), GLASS_ROUGHNESS);
|
||||
brdf2f = 1.0 - brdf2f;
|
||||
brdf2f *= brdf2f;
|
||||
brdf2f = 1.0 - brdf2f;
|
||||
brdf2f = textureLod(u_brdfLUT, brdf2f, 0.0).rg;
|
||||
return envMapSample * (F * brdf2f.r + brdf2f.g);
|
||||
}
|
||||
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
uniform sampler2DShadow u_sunShadowDepthTexture;
|
||||
#ifdef COMPILE_SUN_SHADOW_SMOOTH
|
||||
const vec2 POISSON_DISK[7] = vec2[](
|
||||
vec2(-0.077, 0.995), vec2(0.998, 0.015),
|
||||
vec2(-0.116, -0.987), vec2(-0.916, 0.359),
|
||||
vec2(-0.697, -0.511), vec2(0.740, -0.612),
|
||||
vec2(0.675, 0.682));
|
||||
#define SMOOTH_SHADOW_SAMPLES 1.0 / 8.0
|
||||
#define SMOOTH_SHADOW_RADIUS 0.00075
|
||||
#define SMOOTH_SHADOW_POISSON_SAMPLE(idx, tex, lod, vec3Pos, accum, tmpVec2)\
|
||||
tmpVec2 = vec3Pos.xy + POISSON_DISK[idx] * SMOOTH_SHADOW_RADIUS;\
|
||||
tmpVec2 = clamp(tmpVec2, vec2(0.001), vec2(0.999));\
|
||||
tmpVec2.y += lod;\
|
||||
tmpVec2.y *= SUN_SHADOW_MAP_FRAC;\
|
||||
accum += textureLod(tex, vec3(tmpVec2, vec3Pos.z), 0.0) * SMOOTH_SHADOW_SAMPLES;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
void main() {
|
||||
vec4 worldPosition4f;
|
||||
vec4 worldDirection4f;
|
||||
vec3 normalVector3f;
|
||||
vec2 lightmapCoords2f;
|
||||
float block1f;
|
||||
|
||||
// =========== RESOLVE CONSTANTS ============ //
|
||||
|
||||
worldPosition4f = u_inverseViewMatrix4f * v_position4f;
|
||||
worldPosition4f.xyz /= worldPosition4f.w;
|
||||
worldPosition4f.w = 1.0;
|
||||
worldDirection4f = u_inverseViewMatrix4f * vec4(v_position4f.xyz / v_position4f.w, 0.0);
|
||||
worldDirection4f.xyz = normalize(worldDirection4f.xyz);
|
||||
|
||||
#ifdef COMPILE_ENABLE_LIGHTMAP
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
lightmapCoords2f = v_lightmap2f;
|
||||
#else
|
||||
lightmapCoords2f = u_textureCoords02;
|
||||
#endif
|
||||
#else
|
||||
lightmapCoords2f = vec2(0.0, 1.0);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
normalVector3f = normalize(v_normal3f);
|
||||
block1f = v_block1f;
|
||||
#else
|
||||
normalVector3f = u_uniformNormal3f;
|
||||
block1f = u_blockConstant1f;
|
||||
#endif
|
||||
|
||||
normalVector3f = normalize(mat3(u_inverseViewMatrix4f) * normalVector3f);
|
||||
|
||||
// ============ SUN LIGHTING ============== //
|
||||
|
||||
vec3 lightColor3f = vec3(0.0);
|
||||
if(dot(u_sunDirection4f.xyz, normalVector3f) > 0.0 && lightmapCoords2f.g > 0.5 &&
|
||||
(u_sunColor3f_sky1f.r + u_sunColor3f_sky1f.g + u_sunColor3f_sky1f.b) > 0.001) {
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
|
||||
// ========== SUN SHADOW: LOD0 ============ //
|
||||
|
||||
float skyLight = max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
|
||||
float shadowSample = 1.0;
|
||||
vec4 shadowWorldPos4f = worldPosition4f;
|
||||
shadowWorldPos4f.xyz += normalVector3f * 0.05;
|
||||
|
||||
vec4 shadowTexPos4f;
|
||||
vec2 tmpVec2;
|
||||
for(;;) {
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD04f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy * vec2(1.0, SUN_SHADOW_MAP_FRAC), shadowTexPos4f.z), 0.0);
|
||||
#ifdef COMPILE_SUN_SHADOW_SMOOTH
|
||||
shadowSample *= SMOOTH_SHADOW_SAMPLES;
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(0, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(1, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(2, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(3, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(4, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(5, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
SMOOTH_SHADOW_POISSON_SAMPLE(6, u_sunShadowDepthTexture, 0.0, shadowTexPos4f.xyz, shadowSample, tmpVec2)
|
||||
shadowSample = max(shadowSample * 2.0 - 1.0, 0.0);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
#if defined(COMPILE_SUN_SHADOW_LOD1) || defined(COMPILE_SUN_SHADOW_LOD2)
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD14f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 1.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_SUN_SHADOW_LOD2
|
||||
shadowTexPos4f = u_sunShadowMatrixLOD24f * shadowWorldPos4f;
|
||||
if(shadowTexPos4f.xyz == clamp(shadowTexPos4f.xyz, vec3(0.005), vec3(0.995))) {
|
||||
shadowTexPos4f.y += 2.0;
|
||||
shadowTexPos4f.y *= SUN_SHADOW_MAP_FRAC;
|
||||
shadowSample = textureLod(u_sunShadowDepthTexture, vec3(shadowTexPos4f.xy, shadowTexPos4f.z + 0.00015), 0.0);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
lightColor3f = u_sunColor3f_sky1f.rgb * max(lightmapCoords2f.g * 2.0 - 1.0, 0.0);
|
||||
#ifdef DO_COMPILE_SUN_SHADOWS
|
||||
lightColor3f *= shadowSample * skyLight;
|
||||
#endif
|
||||
lightColor3f = eaglercraftLighting_Glass(lightColor3f, -worldDirection4f.xyz, u_sunDirection4f.xyz, normalVector3f) * u_blockSkySunDynamicLightFac4f.z;
|
||||
}
|
||||
|
||||
// =========== ENVIRONMENT MAP =========== //
|
||||
|
||||
for(;;) {
|
||||
float dst2 = dot(worldPosition4f.xyz, worldPosition4f.xyz);
|
||||
if(dst2 > 16.0) {
|
||||
break;
|
||||
}
|
||||
vec3 reflectDir = reflect(worldDirection4f.xyz, normalVector3f);
|
||||
reflectDir.xz /= abs(reflectDir.y) + 1.0;
|
||||
float dst = 1.0 - dot(reflectDir.xz, reflectDir.xz);
|
||||
dst *= dst;
|
||||
reflectDir.xz = reflectDir.xz * 0.975;
|
||||
vec4 envMapSample4f;
|
||||
if(dst < 0.005) {
|
||||
vec4 sample1 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, 0.25) + vec2(0.5, 0.25), 0.0);
|
||||
vec4 sample2 = textureLod(u_environmentMap, reflectDir.xz * vec2(0.5, -0.25) + vec2(0.5, 0.75), 0.0);
|
||||
envMapSample4f = vec4(mix(sample1.rgb, sample2.rgb, smoothstep(0.0, 1.0, reflectDir.y * -12.5 + 0.5)).rgb, min(sample1.a, sample2.a));
|
||||
}else {
|
||||
reflectDir.xz = reflectDir.xz * vec2(0.5, reflectDir.y > 0.0 ? 0.25 : -0.25);
|
||||
reflectDir.xz += vec2(0.5, reflectDir.y > 0.0 ? 0.25 : 0.75);
|
||||
envMapSample4f = textureLod(u_environmentMap, reflectDir.xz, 0.0);
|
||||
}
|
||||
if(envMapSample4f.a > 0.0) {
|
||||
lightColor3f += eaglercraftIBL_Specular_Glass(envMapSample4f.rgb, worldDirection4f.xyz, normalVector3f) * (1.0 - sqrt(dst2) * 0.25);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef COMPILE_DYNAMIC_LIGHTS
|
||||
|
||||
// =========== DYNAMIC LIGHTING =========== //
|
||||
|
||||
vec3 dlightDist3f, dlightDir3f, dlightColor3f;
|
||||
int safeLightCount = u_dynamicLightCount1i > 12 ? 0 : u_dynamicLightCount1i; // hate this
|
||||
for(int i = 0; i < safeLightCount; ++i) {
|
||||
dlightDist3f = u_dynamicLightArray[i].u_lightPosition4f.xyz - worldPosition4f.xyz;
|
||||
dlightDir3f = normalize(dlightDist3f);
|
||||
if(dot(dlightDir3f, normalVector3f) <= 0.0) {
|
||||
continue;
|
||||
}
|
||||
dlightColor3f = u_dynamicLightArray[i].u_lightColor4f.rgb / dot(dlightDist3f, dlightDist3f);
|
||||
if(dlightColor3f.r + dlightColor3f.g + dlightColor3f.b < 0.025) {
|
||||
continue;
|
||||
}
|
||||
lightColor3f += eaglercraftLighting_Glass(dlightColor3f, -worldDirection4f.xyz, dlightDir3f, normalVector3f) * u_blockSkySunDynamicLightFac4f.w;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// ============ CACLULATE FOG ============= //
|
||||
|
||||
float fogFade = 0.0;
|
||||
if(u_fogParameters4f.x > 0.0) {
|
||||
float atmos = u_fogParameters4f.x >= 4.0 ? 4.0 : 0.0;
|
||||
float type = u_fogParameters4f.x - atmos;
|
||||
fogFade = mix(u_fogColorDark4f.a, u_fogColorLight4f.a, lightmapCoords2f.g);
|
||||
|
||||
float f;
|
||||
float l = length(v_position4f.xyz);
|
||||
if(type == 1.0) {
|
||||
f = (l - u_fogParameters4f.z) / (u_fogParameters4f.w - u_fogParameters4f.z);
|
||||
}else {
|
||||
f = 1.0 - exp(-u_fogParameters4f.y * l);
|
||||
}
|
||||
|
||||
fogFade *= clamp(f, 0.0, 1.0);
|
||||
}
|
||||
|
||||
// ============ OUTPUT COLOR ============== //
|
||||
|
||||
output4f = vec4(lightColor3f * (1.0 - fogFade), 0.1);
|
||||
}
|
||||
|
@ -1,54 +1,54 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
in vec3 a_position3f;
|
||||
|
||||
out vec4 v_position4f;
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
in vec4 a_normal4f;
|
||||
out vec3 v_normal3f;
|
||||
out float v_block1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
in vec2 a_lightmap2f;
|
||||
out vec2 v_lightmap2f;
|
||||
uniform mat4 u_textureMat4f02;
|
||||
#endif
|
||||
|
||||
uniform mat4 u_modelviewMat4f;
|
||||
uniform mat4 u_projectionMat4f;
|
||||
|
||||
#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
|
||||
|
||||
void main() {
|
||||
v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0);
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz);
|
||||
v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0);
|
||||
v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z;
|
||||
#endif
|
||||
|
||||
gl_Position = u_projectionMat4f * v_position4f;
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
in vec3 a_position3f;
|
||||
|
||||
out vec4 v_position4f;
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
in vec4 a_normal4f;
|
||||
out vec3 v_normal3f;
|
||||
out float v_block1f;
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
in vec2 a_lightmap2f;
|
||||
out vec2 v_lightmap2f;
|
||||
uniform mat4 u_textureMat4f02;
|
||||
#endif
|
||||
|
||||
uniform mat4 u_modelviewMat4f;
|
||||
uniform mat4 u_projectionMat4f;
|
||||
|
||||
#define TEX_MAT3(mat4In) mat3(mat4In[0].xyw,mat4In[1].xyw,mat4In[3].xyw)
|
||||
|
||||
void main() {
|
||||
v_position4f = u_modelviewMat4f * vec4(a_position3f, 1.0);
|
||||
|
||||
#ifdef COMPILE_NORMAL_ATTRIB
|
||||
v_normal3f = normalize(mat3(u_modelviewMat4f) * a_normal4f.xyz);
|
||||
v_block1f = floor((a_normal4f.w + 1.0) * 127.0 + 0.5);
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_LIGHTMAP_ATTRIB
|
||||
vec3 v_lightmapTmp3f = TEX_MAT3(u_textureMat4f02) * vec3(a_lightmap2f, 1.0);
|
||||
v_lightmap2f = v_lightmapTmp3f.xy / v_lightmapTmp3f.z;
|
||||
#endif
|
||||
|
||||
gl_Position = u_projectionMat4f * v_position4f;
|
||||
}
|
||||
|
@ -1,111 +1,111 @@
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision highp sampler2D;
|
||||
|
||||
in vec2 v_position2f;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
uniform sampler2D u_texture0;
|
||||
uniform sampler2D u_texture1;
|
||||
|
||||
#ifdef DEBUG_VIEW_18
|
||||
precision highp sampler3D;
|
||||
uniform sampler3D u_texture3D0;
|
||||
uniform float u_fuckU1f;
|
||||
#endif
|
||||
|
||||
uniform mat4 u_inverseViewMatrix;
|
||||
uniform vec2 u_depthSliceStartEnd2f;
|
||||
|
||||
void main() {
|
||||
#ifdef DEBUG_VIEW_0
|
||||
output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).rgb, 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_1
|
||||
vec3 color3f = textureLod(u_texture0, v_position2f, 0.0).rgb;
|
||||
if(color3f.x == 0.0 && color3f.y == 0.0 && color3f.z == 0.0) {
|
||||
output4f = vec4(0.0, 0.0, 0.0, 1.0);
|
||||
}else {
|
||||
output4f = vec4(normalize(mat3(u_inverseViewMatrix) * (color3f * 2.0 - 1.0)), 1.0);
|
||||
}
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_2
|
||||
output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).a, textureLod(u_texture1, v_position2f, 0.0).a, 0.0, 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_3
|
||||
vec4 color4f = textureLod(u_texture0, v_position2f, 0.0);
|
||||
output4f = vec4(color4f.b > 0.99 ? 1.0 : 0.0, color4f.a, 0.0, 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_4
|
||||
output4f = vec4(vec3(clamp((textureLod(u_texture0, v_position2f, 0.0).r - u_depthSliceStartEnd2f.x) * u_depthSliceStartEnd2f.y, 0.0, 1.0)), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_5
|
||||
output4f = vec4(vec3(textureLod(u_texture0, (v_position2f + vec2(0.0, u_depthSliceStartEnd2f.y)) * vec2(1.0, u_depthSliceStartEnd2f.x), 0.0).r), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_6
|
||||
output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).r), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_7
|
||||
output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).a > 0.0 ? 1.0 : 0.0), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_8
|
||||
output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).rgb * 10.0, 1.0);
|
||||
output4f.xyz /= (output4f.xyz + 1.0);
|
||||
output4f.xyz = sqrt(output4f.xyz);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_9
|
||||
output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).g), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_10
|
||||
vec2 coord = (v_position2f + vec2(0.0, u_depthSliceStartEnd2f.y)) * vec2(1.0, u_depthSliceStartEnd2f.x);
|
||||
vec4 color2 = textureLod(u_texture1, coord, 0.0);
|
||||
output4f = vec4(mix(color2.rgb, vec3(textureLod(u_texture0, coord, 0.0).r), color2.a), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_11
|
||||
output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).a * 0.017), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_12
|
||||
output4f = vec4(abs(textureLod(u_texture0, v_position2f, 0.0).rgb) * 0.1, 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_13
|
||||
output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).g > 0.0 ? 1.0 : 0.0), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_14
|
||||
output4f = vec4(textureLod(u_texture0, v_position2f.yx, 0.0).rgb * 2.5, 1.0);
|
||||
output4f.xyz /= (output4f.xyz + 1.0);
|
||||
output4f.xyz = sqrt(output4f.xyz);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_15
|
||||
output4f = vec4(vec3(textureLod(u_texture0, v_position2f.yx, 0.0).a > 0.0 ? 1.0 : 0.0), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_16
|
||||
output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).rg, 0.0, 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_17
|
||||
output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).r) * 10.0, 1.0);
|
||||
output4f.xyz /= (output4f.xyz + 1.0);
|
||||
output4f.xyz = sqrt(output4f.xyz);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_18
|
||||
output4f = vec4(vec3(textureLod(u_texture3D0, vec3(v_position2f, u_fuckU1f), 0.0).r), 1.0);
|
||||
#endif
|
||||
}
|
||||
#line 2
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 lax1dude. All Rights Reserved.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
precision lowp int;
|
||||
precision highp float;
|
||||
precision highp sampler2D;
|
||||
|
||||
in vec2 v_position2f;
|
||||
|
||||
layout(location = 0) out vec4 output4f;
|
||||
|
||||
uniform sampler2D u_texture0;
|
||||
uniform sampler2D u_texture1;
|
||||
|
||||
#ifdef DEBUG_VIEW_18
|
||||
precision highp sampler3D;
|
||||
uniform sampler3D u_texture3D0;
|
||||
uniform float u_fuckU1f;
|
||||
#endif
|
||||
|
||||
uniform mat4 u_inverseViewMatrix;
|
||||
uniform vec2 u_depthSliceStartEnd2f;
|
||||
|
||||
void main() {
|
||||
#ifdef DEBUG_VIEW_0
|
||||
output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).rgb, 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_1
|
||||
vec3 color3f = textureLod(u_texture0, v_position2f, 0.0).rgb;
|
||||
if(color3f.x == 0.0 && color3f.y == 0.0 && color3f.z == 0.0) {
|
||||
output4f = vec4(0.0, 0.0, 0.0, 1.0);
|
||||
}else {
|
||||
output4f = vec4(normalize(mat3(u_inverseViewMatrix) * (color3f * 2.0 - 1.0)), 1.0);
|
||||
}
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_2
|
||||
output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).a, textureLod(u_texture1, v_position2f, 0.0).a, 0.0, 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_3
|
||||
vec4 color4f = textureLod(u_texture0, v_position2f, 0.0);
|
||||
output4f = vec4(color4f.b > 0.99 ? 1.0 : 0.0, color4f.a, 0.0, 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_4
|
||||
output4f = vec4(vec3(clamp((textureLod(u_texture0, v_position2f, 0.0).r - u_depthSliceStartEnd2f.x) * u_depthSliceStartEnd2f.y, 0.0, 1.0)), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_5
|
||||
output4f = vec4(vec3(textureLod(u_texture0, (v_position2f + vec2(0.0, u_depthSliceStartEnd2f.y)) * vec2(1.0, u_depthSliceStartEnd2f.x), 0.0).r), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_6
|
||||
output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).r), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_7
|
||||
output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).a > 0.0 ? 1.0 : 0.0), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_8
|
||||
output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).rgb * 10.0, 1.0);
|
||||
output4f.xyz /= (output4f.xyz + 1.0);
|
||||
output4f.xyz = sqrt(output4f.xyz);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_9
|
||||
output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).g), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_10
|
||||
vec2 coord = (v_position2f + vec2(0.0, u_depthSliceStartEnd2f.y)) * vec2(1.0, u_depthSliceStartEnd2f.x);
|
||||
vec4 color2 = textureLod(u_texture1, coord, 0.0);
|
||||
output4f = vec4(mix(color2.rgb, vec3(textureLod(u_texture0, coord, 0.0).r), color2.a), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_11
|
||||
output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).a * 0.017), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_12
|
||||
output4f = vec4(abs(textureLod(u_texture0, v_position2f, 0.0).rgb) * 0.1, 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_13
|
||||
output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).g > 0.0 ? 1.0 : 0.0), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_14
|
||||
output4f = vec4(textureLod(u_texture0, v_position2f.yx, 0.0).rgb * 2.5, 1.0);
|
||||
output4f.xyz /= (output4f.xyz + 1.0);
|
||||
output4f.xyz = sqrt(output4f.xyz);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_15
|
||||
output4f = vec4(vec3(textureLod(u_texture0, v_position2f.yx, 0.0).a > 0.0 ? 1.0 : 0.0), 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_16
|
||||
output4f = vec4(textureLod(u_texture0, v_position2f, 0.0).rg, 0.0, 1.0);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_17
|
||||
output4f = vec4(vec3(textureLod(u_texture0, v_position2f, 0.0).r) * 10.0, 1.0);
|
||||
output4f.xyz /= (output4f.xyz + 1.0);
|
||||
output4f.xyz = sqrt(output4f.xyz);
|
||||
#endif
|
||||
#ifdef DEBUG_VIEW_18
|
||||
output4f = vec4(vec3(textureLod(u_texture3D0, vec3(v_position2f, u_fuckU1f), 0.0).r), 1.0);
|
||||
#endif
|
||||
}
|
||||
|