mirror of
				https://github.com/Dadido3/noita-mapcap.git
				synced 2025-10-31 03:09:35 +00:00 
			
		
		
		
	Add option to disable most post FX
- Add file patching logic
This commit is contained in:
		
							parent
							
								
									58803cad1d
								
							
						
					
					
						commit
						b4a0b26dfd
					
				@ -58,7 +58,7 @@ function Check:Regular(interval)
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- Check if we have the required settings.
 | 
						-- Check if we have the required settings.
 | 
				
			||||||
	local config, magic = Modification.RequiredChanges()
 | 
						local config, magic, patches = Modification.RequiredChanges()
 | 
				
			||||||
	if config["fullscreen"] then
 | 
						if config["fullscreen"] then
 | 
				
			||||||
		local expected = tonumber(config["fullscreen"])
 | 
							local expected = tonumber(config["fullscreen"])
 | 
				
			||||||
		if expected ~= Coords.FullscreenMode then
 | 
							if expected ~= Coords.FullscreenMode then
 | 
				
			||||||
@ -93,7 +93,7 @@ function Check:Regular(interval)
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- Request a restart if the user has changed specific mod settings.
 | 
						-- Request a restart if the user has changed specific mod settings.
 | 
				
			||||||
	local restartModSettings = {"disable-background", "disable-physics", "disable-postfx", "disable-shaders-gui-ai"}
 | 
						local restartModSettings = {"disable-background", "disable-physics", "disable-postfx"}
 | 
				
			||||||
	for i, v in ipairs(restartModSettings) do
 | 
						for i, v in ipairs(restartModSettings) do
 | 
				
			||||||
		local settingID = "noita-mapcap." .. v
 | 
							local settingID = "noita-mapcap." .. v
 | 
				
			||||||
		if ModSettingGetNextValue(settingID) ~= ModSettingGet(settingID) then
 | 
							if ModSettingGetNextValue(settingID) ~= ModSettingGet(settingID) then
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,12 @@
 | 
				
			|||||||
-- Noita settings/configuration modifications.
 | 
					-- Noita settings/configuration modifications.
 | 
				
			||||||
-- We try to keep persistent modifications to a minimum, but some things have to be changed in order for the mod to work correctly.
 | 
					-- We try to keep persistent modifications to a minimum, but some things have to be changed in order for the mod to work correctly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- There are 4 ways Noita can be modified by code:
 | 
				
			||||||
 | 
					-- - `config.xml`: These are persistent, and Noita needs to be force closed when changed from inside a mod.
 | 
				
			||||||
 | 
					-- - `magic_numbers.xml`: Persistent per world, can only be applied at mod startup.
 | 
				
			||||||
 | 
					-- - Process memory: Volatile, can be modified at runtime. Needs correct memory addresses to function.
 | 
				
			||||||
 | 
					-- - File patching: Volatile, can only be applied at mod startup.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--------------------------
 | 
					--------------------------
 | 
				
			||||||
-- Load library modules --
 | 
					-- Load library modules --
 | 
				
			||||||
--------------------------
 | 
					--------------------------
 | 
				
			||||||
@ -113,12 +119,28 @@ function Modification.SetMemoryOptions(memory)
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---Applies patches to game files based on in the given table.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					---Should be called on mod initialization only.
 | 
				
			||||||
 | 
					---@param patches table
 | 
				
			||||||
 | 
					function Modification.PatchFiles(patches)
 | 
				
			||||||
 | 
						-- Change constants in post_final.frag.
 | 
				
			||||||
 | 
						if patches.PostFinalConst then
 | 
				
			||||||
 | 
							local postFinal = ModTextFileGetContent("data/shaders/post_final.frag")
 | 
				
			||||||
 | 
							for k, v in pairs(patches.PostFinalConst) do
 | 
				
			||||||
 | 
								postFinal = postFinal:gsub(string.format("const bool %s%%s+=[^;]+;", k), string.format("const bool %s = %s;", k, tostring(v)))
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							ModTextFileSetContent("data/shaders/post_final.frag", postFinal)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
---Returns tables with user requested game configuration changes.
 | 
					---Returns tables with user requested game configuration changes.
 | 
				
			||||||
---@return table config -- List of `config.xml` attributes that should be changed.
 | 
					---@return table config -- List of `config.xml` attributes that should be changed.
 | 
				
			||||||
---@return table magic -- List of `magic_number.xml` attributes that should be changed.
 | 
					---@return table magic -- List of `magic_number.xml` attributes that should be changed.
 | 
				
			||||||
---@return table memory -- List of options in RAM of this process that should be changed.
 | 
					---@return table memory -- List of options in RAM of this process that should be changed.
 | 
				
			||||||
 | 
					---@return table patches -- List of patches that should be applied to game files.
 | 
				
			||||||
function Modification.RequiredChanges()
 | 
					function Modification.RequiredChanges()
 | 
				
			||||||
	local config, magic, memory = {}, {}, {}
 | 
						local config, magic, memory, patches = {}, {}, {}, {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- Does the user request a custom resolution?
 | 
						-- Does the user request a custom resolution?
 | 
				
			||||||
	local customResolution = (ModSettingGet("noita-mapcap.custom-resolution-live") and ModSettingGet("noita-mapcap.capture-mode") == "live")
 | 
						local customResolution = (ModSettingGet("noita-mapcap.custom-resolution-live") and ModSettingGet("noita-mapcap.capture-mode") == "live")
 | 
				
			||||||
@ -154,13 +176,24 @@ function Modification.RequiredChanges()
 | 
				
			|||||||
	magic["DEBUG_PAUSE_BOX2D"] = ModSettingGet("noita-mapcap.disable-physics") and "1" or "0"
 | 
						magic["DEBUG_PAUSE_BOX2D"] = ModSettingGet("noita-mapcap.disable-physics") and "1" or "0"
 | 
				
			||||||
	magic["DEBUG_DISABLE_POSTFX_DITHERING"] = ModSettingGet("noita-mapcap.disable-postfx") and "1" or "0"
 | 
						magic["DEBUG_DISABLE_POSTFX_DITHERING"] = ModSettingGet("noita-mapcap.disable-postfx") and "1" or "0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ModSettingGet("noita-mapcap.disable-postfx") then
 | 
				
			||||||
 | 
							patches.PostFinalConst = {
 | 
				
			||||||
 | 
								ENABLE_REFRACTION       = false,
 | 
				
			||||||
 | 
								ENABLE_LIGHTING         = false,
 | 
				
			||||||
 | 
								ENABLE_FOG_OF_WAR       = false,
 | 
				
			||||||
 | 
								ENABLE_GLOW             = false,
 | 
				
			||||||
 | 
								ENABLE_GAMMA_CORRECTION = false,
 | 
				
			||||||
 | 
								ENABLE_PATH_DEBUG       = false,
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ModSettingGet("noita-mapcap.disable-shaders-gui-ai") then
 | 
						if ModSettingGet("noita-mapcap.disable-shaders-gui-ai") then
 | 
				
			||||||
		memory["mPostFxDisabled"] = 1
 | 
							memory["mPostFxDisabled"] = 1
 | 
				
			||||||
		memory["mGuiDisabled"] = 1
 | 
							memory["mGuiDisabled"] = 1
 | 
				
			||||||
		memory["mFreezeAI"] = 1
 | 
							memory["mFreezeAI"] = 1
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return config, magic, memory
 | 
						return config, magic, memory, patches
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
---Sets the camera free if required by the mod settings.
 | 
					---Sets the camera free if required by the mod settings.
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										9
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								init.lua
									
									
									
									
									
								
							@ -56,9 +56,10 @@ dofile("mods/noita-mapcap/files/ui.lua")
 | 
				
			|||||||
---Called in order upon loading a new(?) game.
 | 
					---Called in order upon loading a new(?) game.
 | 
				
			||||||
function OnModPreInit()
 | 
					function OnModPreInit()
 | 
				
			||||||
	-- Set magic numbers and other stuff based on mod settings.
 | 
						-- Set magic numbers and other stuff based on mod settings.
 | 
				
			||||||
	local config, magic, memory = Modification.RequiredChanges()
 | 
						local config, magic, memory, patches = Modification.RequiredChanges()
 | 
				
			||||||
	Modification.SetMagicNumbers(magic)
 | 
						Modification.SetMagicNumbers(magic)
 | 
				
			||||||
	Modification.SetMemoryOptions(memory)
 | 
						Modification.SetMemoryOptions(memory)
 | 
				
			||||||
 | 
						Modification.PatchFiles(patches)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- Override virtual resolution and some other stuff.
 | 
						-- Override virtual resolution and some other stuff.
 | 
				
			||||||
	--ModMagicNumbersFileAdd("mods/noita-mapcap/files/magic-numbers/1024.xml")
 | 
						--ModMagicNumbersFileAdd("mods/noita-mapcap/files/magic-numbers/1024.xml")
 | 
				
			||||||
@ -99,7 +100,7 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
---Called *every* time the game is about to start updating the world.
 | 
					---Called *every* time the game is about to start updating the world.
 | 
				
			||||||
function OnWorldPreUpdate()
 | 
					function OnWorldPreUpdate()
 | 
				
			||||||
	Message:CatchException("OnWorldPreUpdate", function ()
 | 
						Message:CatchException("OnWorldPreUpdate", function()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		-- Coroutines aren't run every frame in this lua sandbox, do it manually here.
 | 
							-- Coroutines aren't run every frame in this lua sandbox, do it manually here.
 | 
				
			||||||
		wake_up_waiting_threads(1)
 | 
							wake_up_waiting_threads(1)
 | 
				
			||||||
@ -109,7 +110,7 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
---Called *every* time the game has finished updating the world.
 | 
					---Called *every* time the game has finished updating the world.
 | 
				
			||||||
function OnWorldPostUpdate()
 | 
					function OnWorldPostUpdate()
 | 
				
			||||||
	Message:CatchException("OnWorldPostUpdate", function ()
 | 
						Message:CatchException("OnWorldPostUpdate", function()
 | 
				
			||||||
		-- Reload mod every 60 frames.
 | 
							-- Reload mod every 60 frames.
 | 
				
			||||||
		-- This allows live updates to the mod while Noita is running.
 | 
							-- This allows live updates to the mod while Noita is running.
 | 
				
			||||||
		-- !!! DISABLE THIS LINE AND THE CORRESPONDING REQUIRE BEFORE COMMITTING !!!
 | 
							-- !!! DISABLE THIS LINE AND THE CORRESPONDING REQUIRE BEFORE COMMITTING !!!
 | 
				
			||||||
@ -144,7 +145,7 @@ end
 | 
				
			|||||||
function OnPausedChanged(isPaused, isInventoryPause)
 | 
					function OnPausedChanged(isPaused, isInventoryPause)
 | 
				
			||||||
	-- Set some stuff based on mod settings.
 | 
						-- Set some stuff based on mod settings.
 | 
				
			||||||
	-- Normally this would be in `OnModSettingsChanged`, but that doesn't seem to be called.
 | 
						-- Normally this would be in `OnModSettingsChanged`, but that doesn't seem to be called.
 | 
				
			||||||
	local config, magic, memory = Modification.RequiredChanges()
 | 
						local config, magic, memory, patches = Modification.RequiredChanges()
 | 
				
			||||||
	Modification.SetMemoryOptions(memory)
 | 
						Modification.SetMemoryOptions(memory)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -280,7 +280,7 @@ modSettings = {
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
				id = "disable-postfx",
 | 
									id = "disable-postfx",
 | 
				
			||||||
				ui_name = "  Disable post FX",
 | 
									ui_name = "  Disable post FX",
 | 
				
			||||||
				ui_description = "Will disable the following postprocessing:\n- Dithering",
 | 
									ui_description = "Will disable the following postprocessing:\n- Dithering\n- Refraction\n- Lighting\n- Fog of war\n- Glow\n- Gamma correction",
 | 
				
			||||||
				value_default = DebugAPI.IsDevBuild(), -- Defaults to true in dev build, false in regular Noita.
 | 
									value_default = DebugAPI.IsDevBuild(), -- Defaults to true in dev build, false in regular Noita.
 | 
				
			||||||
				scope = MOD_SETTING_SCOPE_RUNTIME_RESTART,
 | 
									scope = MOD_SETTING_SCOPE_RUNTIME_RESTART,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user