From b094dc649325bf952ca15ecbd07d79590705daf5 Mon Sep 17 00:00:00 2001 From: intra0 Date: Fri, 13 Dec 2024 22:00:29 -0600 Subject: [PATCH] upload src/yoshiwoolyworld --- .../b5082db8c1a44514_0000000000000079_ps.txt | 153 +++++++ .../f1f99f18ae69719b_0000000000000079_ps.txt | 155 +++++++ .../Graphics/patch_resolution.asm | 23 ++ src/YoshiWoolyWorld/Graphics/rules.txt | 385 ++++++++++++++++++ .../Mods/60fpsMap/patch_FPSWorldMap.asm | 9 + src/YoshiWoolyWorld/Mods/60fpsMap/rules.txt | 7 + 6 files changed, 732 insertions(+) create mode 100644 src/YoshiWoolyWorld/Graphics/b5082db8c1a44514_0000000000000079_ps.txt create mode 100644 src/YoshiWoolyWorld/Graphics/f1f99f18ae69719b_0000000000000079_ps.txt create mode 100644 src/YoshiWoolyWorld/Graphics/patch_resolution.asm create mode 100644 src/YoshiWoolyWorld/Graphics/rules.txt create mode 100644 src/YoshiWoolyWorld/Mods/60fpsMap/patch_FPSWorldMap.asm create mode 100644 src/YoshiWoolyWorld/Mods/60fpsMap/rules.txt diff --git a/src/YoshiWoolyWorld/Graphics/b5082db8c1a44514_0000000000000079_ps.txt b/src/YoshiWoolyWorld/Graphics/b5082db8c1a44514_0000000000000079_ps.txt new file mode 100644 index 00000000..71396bc6 --- /dev/null +++ b/src/YoshiWoolyWorld/Graphics/b5082db8c1a44514_0000000000000079_ps.txt @@ -0,0 +1,153 @@ +#version 450 +#extension GL_ARB_texture_gather : enable +#extension GL_ARB_separate_shader_objects : enable +#ifdef VULKAN +#define ATTR_LAYOUT(__vkSet, __location) layout(set = __vkSet, location = __location) +#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation, std140) +#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation) +#define SET_POSITION(_v) gl_Position = _v; gl_Position.z = (gl_Position.z + gl_Position.w) / 2.0 +#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale.xy,gl_FragCoord.zw) +#define gl_VertexID gl_VertexIndex +#define gl_InstanceID gl_InstanceIndex +#else +#define ATTR_LAYOUT(__vkSet, __location) layout(location = __location) +#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation, std140) +#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation) +#define SET_POSITION(_v) gl_Position = _v +#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale,gl_FragCoord.zw) +#endif +// This shader was automatically converted to be cross-compatible with Vulkan and OpenGL. + +// shader b5082db8c1a44514 +//BGblur vert +const float dither = $dither; +#ifdef VULKAN +layout(set = 1, binding = 1) uniform ufBlock +{ +uniform ivec4 uf_uniformRegisterPS[256]; +uniform vec4 uf_fragCoordScale; +}; +#else +uniform ivec4 uf_uniformRegisterPS[256]; +uniform vec2 uf_fragCoordScale; +#endif +TEXTURE_LAYOUT(0, 1, 0) uniform sampler2D textureUnitPS0; +layout(location = 0) in vec4 passParameterSem0; +layout(location = 0) out vec4 passPixelColor0; +// uf_fragCoordScale was moved to the ufBlock + +float lineRand(vec2 co) +{ + float a = 12.9898; + float b = 78.233; + float c = 43758.5453; + float dt = dot(co.xy, vec2(a, b)); + float sn = mod(dt, 3.14); + return fract(sin(sn) * c); +} + +int clampFI32(int v) +{ + if( v == 0x7FFFFFFF ) + return floatBitsToInt(1.0); + else if( v == 0xFFFFFFFF ) + return floatBitsToInt(0.0); + return floatBitsToInt(clamp(intBitsToFloat(v), 0.0, 1.0)); +} +float mul_nonIEEE(float a, float b){return mix(0.0, a*b, (a != 0.0) && (b != 0.0));} +void main() +{ + ivec4 R0i = ivec4(0); + ivec4 R1i = ivec4(0); + ivec4 R2i = ivec4(0); + ivec4 R3i = ivec4(0); + ivec4 R4i = ivec4(0); + ivec4 R123i = ivec4(0); + int backupReg0i, backupReg1i, backupReg2i, backupReg3i, backupReg4i; + ivec4 PV0i = ivec4(0), PV1i = ivec4(0); + int PS0i = 0, PS1i = 0; + ivec4 tempi = ivec4(0); + float tempResultf; + int tempResulti; + ivec4 ARi = ivec4(0); + bool predResult = true; + bool activeMaskStack[1]; + bool activeMaskStackC[2]; + activeMaskStackC[0] = false; + activeMaskStack[0] = true; + activeMaskStackC[0] = true; + activeMaskStackC[1] = true; + vec3 cubeMapSTM; + int cubeMapFaceId; + R0i = floatBitsToInt(passParameterSem0); + R0i.xy = floatBitsToInt(passParameterSem0.xy- (lineRand(gl_FragCoord.xy)*0.001*dither)).xy; + if( activeMaskStackC[1] == true ) { + R1i.xyzw = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R0i.xy)).xyzw); + } + if( activeMaskStackC[1] == true ) { + // 0 + R4i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R1i.x), intBitsToFloat(uf_uniformRegisterPS[11].x))); + R4i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R1i.y), intBitsToFloat(uf_uniformRegisterPS[11].x))); + R4i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R1i.z), intBitsToFloat(uf_uniformRegisterPS[11].x))); + R4i.w = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R1i.w), intBitsToFloat(uf_uniformRegisterPS[11].x))); + R0i.w = 0x00000001; + PS0i = R0i.w; + // 1 + R0i.z = uf_uniformRegisterPS[22].x + int(1); + } + while( activeMaskStackC[1] == true ) + { + if( activeMaskStackC[1] == true ) { + // 0 + R1i.x = (R0i.z > R0i.w)?int(0xFFFFFFFF):int(0x0); + // 1 + predResult = (R1i.x != 0); + if( predResult == false ) break; + } + if( activeMaskStackC[1] == true ) { + // 0 + backupReg0i = R0i.w; + backupReg0i = R0i.w; + R0i.w = backupReg0i + int(1); + R3i.z = floatBitsToInt(float(backupReg0i)); + PS0i = R3i.z; + // 1 + tempResultf = intBitsToFloat(PS0i); + tempResultf = floor(tempResultf); + tempResultf = clamp(tempResultf, -256.0, 255.0); + ARi.x = int(tempResultf); + PV1i.x = floatBitsToInt(tempResultf); + // 2 + R1i.xyz = floatBitsToInt(vec3(intBitsToFloat(R0i.x),intBitsToFloat(R0i.y),intBitsToFloat(R0i.x)) + vec3(intBitsToFloat(uf_uniformRegisterPS[ARi.x+0].x),intBitsToFloat(uf_uniformRegisterPS[ARi.x+0].y),-(intBitsToFloat(uf_uniformRegisterPS[ARi.x+0].x)))); + R1i.w = floatBitsToInt(intBitsToFloat(R0i.y) + -(intBitsToFloat(uf_uniformRegisterPS[ARi.x+0].y))); + } + if( activeMaskStackC[1] == true ) { + R2i.xyzw = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R1i.xy)).xyzw); + R1i.xyzw = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R1i.zw)).xyzw); + } + if( activeMaskStackC[1] == true ) { + // 0 + tempResultf = intBitsToFloat(R3i.z); + tempResultf = floor(tempResultf); + tempResultf = clamp(tempResultf, -256.0, 255.0); + ARi.x = int(tempResultf); + PV0i.x = floatBitsToInt(tempResultf); + // 1 + R123i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R2i.z),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(R4i.z))); + PV1i.x = R123i.x; + R123i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R2i.y),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(R4i.y))); + PV1i.y = R123i.y; + R123i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R2i.w),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(R4i.w))); + PV1i.z = R123i.z; + R123i.w = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R2i.x),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(R4i.x))); + PV1i.w = R123i.w; + // 2 + R4i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R1i.x),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(PV1i.w))); + R4i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R1i.y),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(PV1i.y))); + R4i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R1i.z),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(PV1i.x))); + R4i.w = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R1i.w),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(PV1i.z))); + } + } + // export + passPixelColor0 = vec4(intBitsToFloat(R4i.x), intBitsToFloat(R4i.y), intBitsToFloat(R4i.z), intBitsToFloat(R4i.w)); +} diff --git a/src/YoshiWoolyWorld/Graphics/f1f99f18ae69719b_0000000000000079_ps.txt b/src/YoshiWoolyWorld/Graphics/f1f99f18ae69719b_0000000000000079_ps.txt new file mode 100644 index 00000000..e398f30e --- /dev/null +++ b/src/YoshiWoolyWorld/Graphics/f1f99f18ae69719b_0000000000000079_ps.txt @@ -0,0 +1,155 @@ +#version 450 +#extension GL_ARB_texture_gather : enable +#extension GL_ARB_separate_shader_objects : enable +#ifdef VULKAN +#define ATTR_LAYOUT(__vkSet, __location) layout(set = __vkSet, location = __location) +#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation, std140) +#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation) +#define SET_POSITION(_v) gl_Position = _v; gl_Position.z = (gl_Position.z + gl_Position.w) / 2.0 +#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale.xy,gl_FragCoord.zw) +#define gl_VertexID gl_VertexIndex +#define gl_InstanceID gl_InstanceIndex +#else +#define ATTR_LAYOUT(__vkSet, __location) layout(location = __location) +#define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation, std140) +#define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation) +#define SET_POSITION(_v) gl_Position = _v +#define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale,gl_FragCoord.zw) +#endif +// This shader was automatically converted to be cross-compatible with Vulkan and OpenGL. + +// shader f1f99f18ae69719b +//Bg horizontal +const float dither = $dither; +#ifdef VULKAN +layout(set = 1, binding = 1) uniform ufBlock +{ +uniform ivec4 uf_uniformRegisterPS[256]; +uniform vec4 uf_fragCoordScale; +}; +#else +uniform ivec4 uf_uniformRegisterPS[256]; +uniform vec2 uf_fragCoordScale; +#endif +TEXTURE_LAYOUT(0, 1, 0) uniform sampler2D textureUnitPS0; +layout(location = 0) in vec4 passParameterSem0; +layout(location = 0) out vec4 passPixelColor0; +// uf_fragCoordScale was moved to the ufBlock + +float lineRand(vec2 co) +{ + float a = 12.9898; + float b = 78.233; + float c = 43758.5453; + float dt = dot(co.xy, vec2(a, b)); + float sn = mod(dt, 3.14); + return fract(sin(sn) * c); +} + +int clampFI32(int v) +{ + if( v == 0x7FFFFFFF ) + return floatBitsToInt(1.0); + else if( v == 0xFFFFFFFF ) + return floatBitsToInt(0.0); + return floatBitsToInt(clamp(intBitsToFloat(v), 0.0, 1.0)); +} +float mul_nonIEEE(float a, float b){return mix(0.0, a*b, (a != 0.0) && (b != 0.0));} +void main() +{ + ivec4 R0i = ivec4(0); + ivec4 R1i = ivec4(0); + ivec4 R2i = ivec4(0); + ivec4 R3i = ivec4(0); + ivec4 R4i = ivec4(0); + ivec4 R123i = ivec4(0); + int backupReg0i, backupReg1i, backupReg2i, backupReg3i, backupReg4i; + ivec4 PV0i = ivec4(0), PV1i = ivec4(0); + int PS0i = 0, PS1i = 0; + ivec4 tempi = ivec4(0); + float tempResultf; + int tempResulti; + ivec4 ARi = ivec4(0); + bool predResult = true; + bool activeMaskStack[1]; + bool activeMaskStackC[2]; + activeMaskStackC[0] = false; + activeMaskStack[0] = true; + activeMaskStackC[0] = true; + activeMaskStackC[1] = true; + vec3 cubeMapSTM; + int cubeMapFaceId; + R0i = floatBitsToInt(passParameterSem0); +R0i.xy = floatBitsToInt(passParameterSem0.xy- (lineRand(gl_FragCoord.xy)*0.001*dither)).xy; + //R0f.xy = R0f.xy - (lineRand(gl_FragCoord.xy)*0.015); + + if( activeMaskStackC[1] == true ) { + R1i.xyzw = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R0i.xy)).xyzw); + } + if( activeMaskStackC[1] == true ) { + // 0 + R4i.x = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R1i.x), intBitsToFloat(uf_uniformRegisterPS[11].x))); + R4i.y = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R1i.y), intBitsToFloat(uf_uniformRegisterPS[11].x))); + R4i.z = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R1i.z), intBitsToFloat(uf_uniformRegisterPS[11].x))); + R4i.w = floatBitsToInt(mul_nonIEEE(intBitsToFloat(R1i.w), intBitsToFloat(uf_uniformRegisterPS[11].x))); + R0i.w = 0x00000001; + PS0i = R0i.w; + // 1 + R0i.z = uf_uniformRegisterPS[22].x + int(1); + } + while( activeMaskStackC[1] == true ) + { + if( activeMaskStackC[1] == true ) { + // 0 + R1i.x = (R0i.z > R0i.w)?int(0xFFFFFFFF):int(0x0); + // 1 + predResult = (R1i.x != 0); + if( predResult == false ) break; + } + if( activeMaskStackC[1] == true ) { + // 0 + backupReg0i = R0i.w; + backupReg0i = R0i.w; + R0i.w = backupReg0i + int(1); + R3i.z = floatBitsToInt(float(backupReg0i)); + PS0i = R3i.z; + // 1 + tempResultf = intBitsToFloat(PS0i); + tempResultf = floor(tempResultf); + tempResultf = clamp(tempResultf, -256.0, 255.0); + ARi.x = int(tempResultf); + PV1i.x = floatBitsToInt(tempResultf); + // 2 + R1i.xyz = floatBitsToInt(vec3(intBitsToFloat(R0i.x),intBitsToFloat(R0i.y),intBitsToFloat(R0i.x)) + vec3(intBitsToFloat(uf_uniformRegisterPS[ARi.x+0].x),intBitsToFloat(uf_uniformRegisterPS[ARi.x+0].y),-(intBitsToFloat(uf_uniformRegisterPS[ARi.x+0].x)))); + R1i.w = floatBitsToInt(intBitsToFloat(R0i.y) + -(intBitsToFloat(uf_uniformRegisterPS[ARi.x+0].y))); + } + if( activeMaskStackC[1] == true ) { + R2i.xyzw = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R1i.xy)).xyzw); + R1i.xyzw = floatBitsToInt(texture(textureUnitPS0, intBitsToFloat(R1i.zw)).xyzw); + } + if( activeMaskStackC[1] == true ) { + // 0 + tempResultf = intBitsToFloat(R3i.z); + tempResultf = floor(tempResultf); + tempResultf = clamp(tempResultf, -256.0, 255.0); + ARi.x = int(tempResultf); + PV0i.x = floatBitsToInt(tempResultf); + // 1 + R123i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R2i.z),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(R4i.z))); + PV1i.x = R123i.x; + R123i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R2i.y),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(R4i.y))); + PV1i.y = R123i.y; + R123i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R2i.w),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(R4i.w))); + PV1i.z = R123i.z; + R123i.w = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R2i.x),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(R4i.x))); + PV1i.w = R123i.w; + // 2 + R4i.x = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R1i.x),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(PV1i.w))); + R4i.y = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R1i.y),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(PV1i.y))); + R4i.z = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R1i.z),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(PV1i.x))); + R4i.w = floatBitsToInt((mul_nonIEEE(intBitsToFloat(R1i.w),intBitsToFloat(uf_uniformRegisterPS[ARi.x+11].x)) + intBitsToFloat(PV1i.z))); + } + } + // export + passPixelColor0 = vec4(intBitsToFloat(R4i.x), intBitsToFloat(R4i.y), intBitsToFloat(R4i.z), intBitsToFloat(R4i.w)); +} diff --git a/src/YoshiWoolyWorld/Graphics/patch_resolution.asm b/src/YoshiWoolyWorld/Graphics/patch_resolution.asm new file mode 100644 index 00000000..e88e84f5 --- /dev/null +++ b/src/YoshiWoolyWorld/Graphics/patch_resolution.asm @@ -0,0 +1,23 @@ +[YoshiWoolyWorld_Resolution_v110] +moduleMatches = 0x6AEF65E7 ; v1.1.0(EU/NA/JP) +; rodata constants +0x10001A44 = .float $width/$height +0x10101398 = .float $width/$height +0x10247D7C = .float $width/$height +0x1024E7E4 = .float $width/$height +0x102740B0 = .float $width/$height +0x102740D8 = .float $width/$height +0x102A4A70 = .float $width/$height +0x1025EB2C = .float ($gameWidth/$gameHeight)/($width/$height) + +[YoshiWoolyWorld_Resolution_v100] +moduleMatches = 0x363CA665 ; v1.0.0(EU/NA/JP) +; rodata constants +0x10001A44 = .float $width/$height +0x10101398 = .float $width/$height +0x10247D7C = .float $width/$height +0x1024E7E4 = .float $width/$height +0x10274058 = .float $width/$height +0x10274080 = .float $width/$height +0x102A4970 = .float $width/$height +0x1025EAD4 = .float ($gameWidth/$gameHeight)/($width/$height) diff --git a/src/YoshiWoolyWorld/Graphics/rules.txt b/src/YoshiWoolyWorld/Graphics/rules.txt new file mode 100644 index 00000000..06a0f4d8 --- /dev/null +++ b/src/YoshiWoolyWorld/Graphics/rules.txt @@ -0,0 +1,385 @@ +[Definition] +titleIds = 0005000010131F00,0005000010184E00,0005000010184D00 +name = Graphics Settings +path = "Yoshi's Woolly World/Graphics" +description = Changes the resolution of the game, quality of the shadows and the amount of dithering for the background blur.|Using a higher amount of dithering removes the banding (stripes) that the background blur has.|Made by M&&M and getdls. +#Credits: M&&M, getdls +version = 6 + +[Default] +$width = 1280 +$height = 720 +$gameWidth = 1280 +$gameHeight = 720 +$shadowRes = 1 + +$ditherRecommended = 1 +$dither = 0.1 + + +# Resolution + +[Preset] +category = Resolution +name = 640x360 +$width = 640 +$height = 360 +$ditherRecommended = 1 + +[Preset] +category = Resolution +name = 960x540 +$width = 960 +$height = 540 +$ditherRecommended = 1 + +[Preset] +category = Resolution +name = 1280x720 (Default) +default = 1 +$ditherRecommended = 1 + +[Preset] +category = Resolution +name = 1600x900 +$width = 1600 +$height = 900 +$ditherRecommended = 1 + +[Preset] +category = Resolution +name = 1920x1080 +$width = 1920 +$height = 1080 +$ditherRecommended = 2 + +[Preset] +category = Resolution +name = 2560x1440 +$width = 2560 +$height = 1440 +$ditherRecommended = 3 + +[Preset] +category = Resolution +name = 3200x1800 +$width = 3200 +$height = 1800 +$ditherRecommended = 3 + +[Preset] +category = Resolution +name = 3840x2160 +$width = 3840 +$height = 2160 +$ditherRecommended = 4 + +[Preset] +category = Resolution +name = 5120x2880 +$width = 5120 +$height = 2880 +$ditherRecommended = 5 + +[Preset] +category = Resolution +name = 7680x4320 +$width = 7680 +$height = 4320 +$ditherRecommended = 5 + +[Preset] +category = Resolution +name = 1680x1050 (16:10) +$width = 1680 +$height = 1050 +$ditherRecommended = 1 + +[Preset] +category = Resolution +name = 1920x1200 (16:10) +$width = 1920 +$height = 1200 +$ditherRecommended = 2 + +[Preset] +category = Resolution +name = 2560x1080 (21:9) +$width = 2560 +$height = 1080 +$ditherRecommended = 2 + +[Preset] +category = Resolution +name = 3440x1440 (21:9) +$width = 3440 +$height = 1440 +$ditherRecommended = 3 + +[Preset] +category = Resolution +name = 5120x2160 (21:9) +$width = 5120 +$height = 2160 +$ditherRecommended = 4 + +[Preset] +category = Resolution +name = 3840x1080 (32:9) +$width = 3840 +$height = 1080 +$ditherRecommended = 5 + +[Preset] +category = Resolution +name = 5120×1440 (32:9) +$width = 5120 +$height = 1440 +$ditherRecommended = 5 + +[Preset] +category = Resolution +name = 7680x2160 (32:9) +$width = 7680 +$height = 2160 +$ditherRecommended = 5 + + +# Shadow Quality + +[Preset] +category = Shadow Quality +name = Low (50%) +$shadowRes = 0.5 + +[Preset] +category = Shadow Quality +name = Medium (100%, Default) +default = 1 + +[Preset] +category = Shadow Quality +name = High (200%) +$shadowRes = 2 + +[Preset] +category = Shadow Quality +name = Ultra (300%) +$shadowRes = 3 + +[Preset] +category = Shadow Quality +name = Extreme (400%, Unstable) +$shadowRes = 4 + + +# Blur Dithering + +[Preset] +category = Blur Dithering +name = Low (Recommended) +condition = $ditherRecommended == 1 +default = 1 +$dither = 0.1 + +[Preset] +category = Blur Dithering +name = Low (for 900p and lower) +condition = $ditherRecommended != 1 +$dither = 0.1 + +[Preset] +category = Blur Dithering +name = Medium (Recommended) +condition = $ditherRecommended == 2 +default = 1 +$dither = 0.25 + +[Preset] +category = Blur Dithering +name = Medium (for 1080p and higher) +condition = $ditherRecommended != 2 +$dither = 0.5 + +[Preset] +category = Blur Dithering +name = High (Recommended) +condition = $ditherRecommended == 3 +default = 1 +$dither = 0.75 + +[Preset] +category = Blur Dithering +name = High (for 1440p and higher) +condition = $ditherRecommended != 3 +$dither = 0.75 + +[Preset] +category = Blur Dithering +name = Ultra (Recommended) +condition = $ditherRecommended == 4 +default = 1 +$dither = 0.85 + +[Preset] +category = Blur Dithering +name = Ultra (for 2160p and higher) +condition = $ditherRecommended != 4 +$dither = 0.85 + +[Preset] +category = Blur Dithering +name = Extreme (for 2880p and higher) +condition = $ditherRecommended != 5 +$dither = 0.95 + +[Preset] +category = Blur Dithering +name = Extreme (Recommended) +condition = $ditherRecommended == 5 +default = 1 +$dither = 0.95 + + +# Texture Redefines + +[TextureRedefine] # TV Resolution +width = 1280 +height = 720 +#formats = 0x033,0x007,0x01a +formatsExcluded = 0x033 +tileModesExcluded = 0x1 +overwriteWidth = ($width/$gameWidth) * 1280 +overwriteHeight = ($height/$gameHeight) * 720 + +[TextureRedefine] # Shadows +width = 1024 +height = 1024 +formats = 0x005 +overwriteWidth = $shadowRes * 1024 +overwriteHeight = $shadowRes * 1024 + +[TextureRedefine] # Curtains, Shadows +width = 864 +height = 480 +#formats = 0x034 +overwriteWidth = ($width/$gameWidth) * 864 +overwriteHeight = ($height/$gameHeight) * 480 + +[TextureRedefine] # Curtains, Shadows +width = 854 +height = 480 +#formats = 0x034 +overwriteWidth = ($width/$gameWidth) * 854 +overwriteHeight = ($height/$gameHeight) * 480 + + +# 1/2 res + +[TextureRedefine] +width = 640 +height = 368 +#formats = 0x816,0x820,0x816,0x80e,0x019,0x001,0x01a +tileModesExcluded = 0x001 +overwriteWidth = ($width/$gameWidth) * 640 +overwriteHeight = ($height/$gameHeight) * 368 + +[TextureRedefine] +width = 640 +height = 360 +#formats = 0x816,0x820,0x816,0x80e,0x019,0x001,0x01a +tileModesExcluded = 0x001 +overwriteWidth = ($width/$gameWidth) * 640 +overwriteHeight = ($height/$gameHeight) * 360 + + +# 1/4 res + +[TextureRedefine] +width = 320 +height = 192 +#formats = 0x816,0x019,0x01a,0x001 +overwriteWidth = ($width/$gameWidth) * 320 +overwriteHeight = ($height/$gameHeight) * 192 + +[TextureRedefine] +width = 320 +height = 180 +#formats = 0x816,0x019,0x01a,0x001 +overwriteWidth = ($width/$gameWidth) * 320 +overwriteHeight = ($height/$gameHeight) * 180 + + +# 1/8 res + +[TextureRedefine] +width = 160 +height = 96 +#formats = 0x806,0x007,0x01a +overwriteWidth = ($width/$gameWidth) * 160 +overwriteHeight = ($height/$gameHeight) * 96 + +[TextureRedefine] +width = 160 +height = 90 +#formats = 0x806,0x007,0x01a +overwriteWidth = ($width/$gameWidth) * 160 +overwriteHeight = ($height/$gameHeight) * 90 + + +# 1/16 res + +[TextureRedefine] +width = 96 +height = 48 +#formats = 0x806,0x01a +overwriteWidth = ($width/$gameWidth) * 96 +overwriteHeight = ($height/$gameHeight) * 48 + +[TextureRedefine] +width = 80 +height = 45 +#formats = 0x806,0x01a +overwriteWidth = ($width/$gameWidth) * 80 +overwriteHeight = ($height/$gameHeight) * 45 + +# 1/32 res + +[TextureRedefine] +width = 64 +height = 32 +formats = 0x01a +overwriteWidth = ($width/$gameWidth) * 64 +overwriteHeight = ($height/$gameHeight) * 32 + +[TextureRedefine] +width = 40 +height = 22 +formats = 0x01a +overwriteWidth = ($width/$gameWidth) * 40 +overwriteHeight = ($height/$gameHeight) * 22 + + +# These cause unwanted textures to be upscaled and cause issues. + +#[TextureRedefine] #skybox? +#width = 256 +#height = 256 +#depth = 1 +#formats = 0x008 +#overwriteWidth = ($width/$gameWidth) * 256 +#overwriteHeight = ($height/$gameHeight) * 256 +# +#[TextureRedefine] # haze? +#width = 160 +#height = 208 +##formats = 0x806,0x007,0x01a +#overwriteWidth = ($width/$gameWidth) * 160 +#overwriteHeight = ($height/$gameHeight) * 208 +# +#[TextureRedefine] # haze? +#width = 150 +#height = 200 +##formats = 0x806,0x007,0x01a +#overwriteWidth = ($width/$gameWidth) * 150 +#overwriteHeight = ($height/$gameHeight) * 200 diff --git a/src/YoshiWoolyWorld/Mods/60fpsMap/patch_FPSWorldMap.asm b/src/YoshiWoolyWorld/Mods/60fpsMap/patch_FPSWorldMap.asm new file mode 100644 index 00000000..2681ce8d --- /dev/null +++ b/src/YoshiWoolyWorld/Mods/60fpsMap/patch_FPSWorldMap.asm @@ -0,0 +1,9 @@ +[YoshiWoolyWorld_FPSWorldMap_v110] +moduleMatches = 0x6AEF65E7 ; v1.1.0(EU/NA/JP) +;prevent going to 30 fps mode +0x02B38D7C = b .+0x20 + +[YoshiWoolyWorld_FPSWorldMap_v100] +moduleMatches = 0x363CA665 ; v1.0.0(EU/NA/JP) +;prevent going to 30 fps mode +0x02B38940 = b .+0x20 diff --git a/src/YoshiWoolyWorld/Mods/60fpsMap/rules.txt b/src/YoshiWoolyWorld/Mods/60fpsMap/rules.txt new file mode 100644 index 00000000..7929f4b9 --- /dev/null +++ b/src/YoshiWoolyWorld/Mods/60fpsMap/rules.txt @@ -0,0 +1,7 @@ +[Definition] +titleIds = 0005000010131F00,0005000010184E00,0005000010184D00 +name = 60 FPS World Map +path = "Yoshi's Woolly World/Mods/60FPS World Map" +description = Prevents 30 fps mode in the world map. +#Credits: Xalphenos +version = 6