[MOD 1.1] Squeak Through 1.8.2

Topics and discussion about specific mods
Supercheese
Filter Inserter
Filter Inserter
Posts: 841
Joined: Mon Sep 14, 2015 7:40 am
Contact:

[MOD 1.1] Squeak Through 1.8.2

Post by Supercheese »

Squeak Through

Though this is quite an old mod by now (as evidenced by the images here), I am grateful for continued strong community support. Thanks everyone!

You can walk right on through your rows of furnaces and assemblers, but...
Problem
Solved
Spaghetti pipe blues
Fixed that too
Info:
  • This small mod slightly reduces the collision boxes for many structures, allowing you to "squeak through" them while walking around your base.
    Say goodbye to the frustration of having your path blocked by your steam engines or solar panels when walking around your base!
  • Name: Squeak Through
  • Latest Release: v1.8.2, February 21, 2021
  • Factorio Version: 1.1
  • License: GNU GPL
  • Authors: Nommy, Lupin, Foxite, Supercheese, & the community
  • Github: https://github.com/Suprcheese/Squeak-Through
Long Description:
This mod slightly reduces the collision boxes of the following entity types (as found in type = "..." in the prototype definition), including both vanilla and modded structures, so that you can walk between them when two are adjacent:
  • "solar-panel"
  • "accumulator"
  • "generator"
  • "pipe"
  • "pipe-to-ground"
  • "heat-pipe"
  • "reactor"
  • "programmable-speaker"
  • "container"
  • "logistic-container"
  • "assembling-machine"
  • "arithmetic-combinator"
  • "decider-combinator"
  • "constant-combinator"
  • "boiler"
  • "electric-pole"
  • "mining-drill"
  • "pump"
  • "radar"
  • "storage-tank"
  • "tree"
  • "turret"
  • "beacon"
  • "furnace"
  • "lab"

Note to modders:

New in version 1.4.0 is that Squeak Through will now look for the entity prototype value "squeak_behaviour", which if set to false will mean the entity is excluded from having its bounding box adjusted. Simply adding

Code: Select all

squeak_behaviour = false
in the relevant entity prototype should suffice.


While this alone will not immediately address mod compatibility issues, it does provide an easier step than before.

For future compatibility issues, feature requests, bug reports, etc. I would direct all interested parties primarily to GitHub: https://github.com/Suprcheese/Squeak-Through
Attachments
Squeak Through_1.8.0.zip
Factorio 0.18 version
(38.77 KiB) Downloaded 1429 times
Squeak Through_1.4.0.zip
Factorio 0.17 version
(38.75 KiB) Downloaded 475 times
Squeak Through_1.3.0.zip
Factorio 0.17 version
(36.49 KiB) Downloaded 572 times
Squeak Through_1.2.2.zip
Factorio 0.16 version
(17.36 KiB) Downloaded 867 times
Squeak Through_1.2.1.zip
Factorio 0.16 version
(17.12 KiB) Downloaded 431 times
Squeak Through_1.1.7.zip
Factorio 0.15 version
(16.96 KiB) Downloaded 1209 times
Last edited by Supercheese on Mon Feb 22, 2021 12:36 am, edited 28 times in total.
User avatar
Klonan
Factorio Staff
Factorio Staff
Posts: 5290
Joined: Sun Jan 11, 2015 2:09 pm
Contact:

Re: [MOD 0.12.X] Squeak Through

Post by Klonan »

Lol i love those images!

Great work
thatsIch
Burner Inserter
Burner Inserter
Posts: 7
Joined: Thu Feb 19, 2015 1:17 pm
Contact:

Re: [MOD 0.12.X] Squeak Through

Post by thatsIch »

There was a 0.11 mod which was called Jetpack. I wonder if it is based on the same principle.

Nice images though!
Nommy
Burner Inserter
Burner Inserter
Posts: 9
Joined: Fri Oct 23, 2015 11:37 am
Contact:

Re: [MOD 0.12.X] Squeak Through

Post by Nommy »

This mod is great!

I looked into it a bit and found out how to make it work dynamically so that the sizes of things added by mods is adjusted too. I'll attach the code (data-final-fixes.lua) and if you want you could replace your data.lua with that file and use it instead. I'd rather that than release it as a separate mod because it does the same thing and I probably won't update it for long anyway, and this is your idea, but if you don't want to use it I will so that other people can squeak through mod stuff too.Those pics made me LOL too BTW.

Anyway this is how it works:
Naming the file data-final-fixes.lua causes the code to run after all data.lua (and data-updates.lua) files from other mods have been processed, so their prototypes will exists when this code executes.

There's a table at the top which defines the prototype types you want to check and the minimum gap required to walk between them.

Code: Select all

local prototype_type_gap_requirements = {
	["solar-panel"]             = 0.25,
	["accumulator"]             = 0.25,
	["generator"]               = 0.25,
	["pipe"]                    = 0.42,
....
It checks all prototypes of these types (so all solar-panels and all pipess etc.) and adjusts the dimensions of the collision box by just enough to make the gap at the edge as large as the size you specify in the list. It doesn't matter how big the thing is because it calculates how big the gap at the edge is and changes the dimensions based on that, only if needed (done in adjust_coordinate_to_form_gap()).

I added a few more, like trees and turrets etc. from the list on the wiki too.

That's the idea anyway, I've only tested it a little, but it seems to be working as intended. You can walk between bobs steam engines and stuff from other mods too.

Edit: Here's the whole data-final-fixes.lua file for anyone interested, there's not much to it.

Code: Select all

-- Note: Any mods which define the collision box size of prototypes in data-final-fixes.lua will not be affected by this code if that mod loads after this one.
--       Prototypes normally defined in data.lua, or data-updates.lua will be loaded before this executes and properly updated.

-- Table of prototype types to check and the minimum gap required to allow walking in between them. 
local prototype_type_gap_requirements = {
	["solar-panel"]             = 0.25,
	["accumulator"]             = 0.25,
	["generator"]               = 0.25,
	["pipe"]                    = 0.42,
	["pipe-to-ground"]          = 0.42,
	["container"]               = 0.25,
	["smart-container"]         = 0.25,
	["logistic-container"]      = 0.25,
	["assembling-machine"]      = 0.25,
	["arithmetic-combinator"]   = 0.25,
	["decider-combinator"]      = 0.25,
	["constant-combinator"]     = 0.25,
	["boiler"]                  = 0.42,
	["electric-pole"]           = 0.25,
	["mining-drill"]            = 0.25,
	["pump"]                    = 0.42,
	["radar"]                   = 0.25,
	["storage-tank"]            = 0.25,
	["tree"]                    = 0.25,
	["turret"]                  = 0.25,
	["beacon"]                  = 0.25,
	["furnace"]                 = 0.25,
	["lab"]                     = 0.25,
	}
-- All defined prototypes of the types listed above will be checked in adjust_collision_boxes() and have their collision boxes reduced to form the specified gap where needed.


-- Returns a coordinate reduced where required to form the specified gap between it and the tile boundary.
local function adjust_coordinate_to_form_gap(coordinate, required_gap)

	-- Treat all coordinates as positive to simplify calculations.
	local is_negative_coordinate = (coordinate < 0)
	if is_negative_coordinate then
		coordinate = coordinate * -1
	end
	
	local tile_width = 0.5
	
	-- Calculate the existing gap (how much space there is to the next tile edge or 0 when the coordinate lies on a tile edge).
	local distance_past_last_tile_edge = coordinate % tile_width -- This is how far the collision box extends over any tile edge, and should be 0 for a perfect fit.
	local existing_gap = 0
	if distance_past_last_tile_edge > 0 then
		existing_gap = (tile_width - distance_past_last_tile_edge)
	end
	
	-- Reduce the coordinate to make the gap large enough if it is not already.
	if existing_gap < required_gap then
		coordinate = coordinate + existing_gap - required_gap
	end
	
	-- Make the coordinate negative again if it was originally negative.
	if is_negative_coordinate then
		coordinate = coordinate * -1
	end
	
	return coordinate
end


-- Checks all existing prototypes listed in prototype_type_gap_requirements and reduces their collision box to make a gap large enough to walk though if it is not already.
local function adjust_collision_boxes()
	
	for prototype_type, required_gap in pairs(prototype_type_gap_requirements) do
	
		for key, prototype in pairs(data.raw[prototype_type]) do
		
			-- If the prototype has a collision box then resize it.
			if prototype["collision_box"] then
				
				for y=1,2 do
					for x=1,2 do
						prototype.collision_box[x][y] = adjust_coordinate_to_form_gap(prototype.collision_box[x][y], required_gap)
					end
				end
				
			end
			
		end
	end
end


-- Make the adjustments.
adjust_collision_boxes()
Attachments
data-final-fixes.lua
(3.33 KiB) Downloaded 864 times
Supercheese
Filter Inserter
Filter Inserter
Posts: 841
Joined: Mon Sep 14, 2015 7:40 am
Contact:

Re: [MOD 0.12.X] Squeak Through

Post by Supercheese »

Wow, awesome! I'm glad you liked the initial idea, and your implementation is certainly much more flexible. I'll package an update as soon as I can.
Nommy
Burner Inserter
Burner Inserter
Posts: 9
Joined: Fri Oct 23, 2015 11:37 am
Contact:

Re: [MOD 0.12.X] Squeak Through

Post by Nommy »

Awesome! I'd forgotten about this until just now.

I was thinking before if there could be any issues with weirdly sized collision boxes and there could be one if a normally a negative coordinate was 0 for some reason. I'll post an update in the next day or so to handle this correctly, and to make sure it doesn't change boxes that are set = {{0, 0}, {0, 0}} designating no collisions as well.
A_Factorio457
Burner Inserter
Burner Inserter
Posts: 9
Joined: Wed May 27, 2015 7:11 am
Contact:

Re: [MOD 0.12.X] Squeak Through

Post by A_Factorio457 »

I replaced the old data.lua with this one. I have an issue with BioFarm where it's poles (which have a 0 size) can't be loaded correctly. So I made it dependent on squeak through so it loads after squeak through. Now BioFarm loads but everything in it is gone. Please Help
User avatar
binbinhfr
Smart Inserter
Smart Inserter
Posts: 1524
Joined: Sat Feb 27, 2016 7:37 pm
Contact:

Re: [MOD 0.12.X] Squeak Through

Post by binbinhfr »

great mod, thanks.

however, it can mess up other mods.
For example, the Rail Tanker mod, very useful to transport oil via rail, but that use the "small pump" to load/unload oil.
If you change the hitbox of small pump, the Rail Tanker does not connect anymore.
So I put the "small pump" line in comment to avoid this. Because afterall, you do not bump so often into a small pump ;-)
My mods on the Factorio Mod Portal :geek:
Supercheese
Filter Inserter
Filter Inserter
Posts: 841
Joined: Mon Sep 14, 2015 7:40 am
Contact:

Re: [MOD 0.12.X] Squeak Through

Post by Supercheese »

binbinhfr wrote:great mod, thanks.

however, it can mess up other mods.
For example, the Rail Tanker mod, very useful to transport oil via rail, but that use the "small pump" to load/unload oil.
If you change the hitbox of small pump, the Rail Tanker does not connect anymore.
So I put the "small pump" line in comment to avoid this. Because afterall, you do not bump so often into a small pump ;-)
The rail tanker mod does not add any extra "pump" type entities -- the mod just asks you to use vanilla small pumps to connect to the tanker. I do not see how altering the collision box of the vanilla pump would cause problems here... :?
User avatar
binbinhfr
Smart Inserter
Smart Inserter
Posts: 1524
Joined: Sat Feb 27, 2016 7:37 pm
Contact:

Re: [MOD 0.12.X] Squeak Through

Post by binbinhfr »

Supercheese wrote:
binbinhfr wrote:great mod, thanks.

however, it can mess up other mods.
For example, the Rail Tanker mod, very useful to transport oil via rail, but that use the "small pump" to load/unload oil.
If you change the hitbox of small pump, the Rail Tanker does not connect anymore.
So I put the "small pump" line in comment to avoid this. Because afterall, you do not bump so often into a small pump ;-)
The rail tanker mod does not add any extra "pump" type entities -- the mod just asks you to use vanilla small pumps to connect to the tanker. I do not see how altering the collision box of the vanilla pump would cause problems here... :?
I cannot tell you why it works, but commenting the "small pump" line in Squeak Mod, so reversing to original value, make the train to pump connection work again... It's a simple test to make.
My mods on the Factorio Mod Portal :geek:
Zackreaver
Burner Inserter
Burner Inserter
Posts: 17
Joined: Tue Mar 01, 2016 9:24 am
Contact:

Re: [MOD 0.12.X] Squeak Through

Post by Zackreaver »

I believe it's because the collision box is used for locating the location of the pump, and modifying it actually makes it believe they aren't close enough.

I commented out small pump and it also fixes the problem, I would suggest just commenting out small pump since we never really have problems with pumps blocking paths.
Supercheese
Filter Inserter
Filter Inserter
Posts: 841
Joined: Mon Sep 14, 2015 7:40 am
Contact:

Re: [MOD 0.12.X] Squeak Through

Post by Supercheese »

Yeah I guess that does make sense. I've removed the Small Pump from the affected entities in version 1.0.1.
Lupin
Burner Inserter
Burner Inserter
Posts: 8
Joined: Sat Apr 09, 2016 12:41 pm
Contact:

Re: [MOD 0.12.X] Squeak Through 1.0.1

Post by Lupin »

I had problems with the dynamic code above with mods that add entities with a 0,0-collision box (like "Bio Farm" or "Powered Entities"). I got an error along the line "colliosion box must contain point {0,0}"
I added the following lines checking, if the coordinate would be less than 0 and set it to 0 in that case. It seems to have solved the problem.

Code: Select all

	-- Reduce the coordinate to make the gap large enough if it is not already.
	if existing_gap < required_gap then
		coordinate = coordinate + existing_gap - required_gap
		if coordinate < 0 then
			coordinate = 0
		end
	end
Supercheese
Filter Inserter
Filter Inserter
Posts: 841
Joined: Mon Sep 14, 2015 7:40 am
Contact:

Re: [MOD 0.12.X] Squeak Through 1.0.1

Post by Supercheese »

Lupin wrote:I had problems with the dynamic code above with mods that add entities with a 0,0-collision box (like "Bio Farm" or "Powered Entities"). I got an error along the line "colliosion box must contain point {0,0}"
I added the following lines checking, if the coordinate would be less than 0 and set it to 0 in that case. It seems to have solved the problem.
Very nice. I've updated the mod to version 1.1.0, which (at long last!) includes the proper code to search all loaded entities and make sure you can Squeak Through when they are placed side by side.

This also means that there is really nothing left of the original mod code that I wrote! It seems I've switched from author to maintainer for this one. :geek:

Full changes:

Removed original (extremely simple) code and incorporated the more advanced code by Nommy: viewtopic.php?p=114341#p114341
Also incorporated Lupin's solution to some incompatibility issues with other mods: viewtopic.php?p=146721#p146721
This means that all structures of the following prototypes are affected by the mod now, including both vanilla and modded structures:
  • "solar-panel"
  • "accumulator"
  • "generator"
  • "pipe"
  • "pipe-to-ground"
  • "container"
  • "smart-container"
  • "logistic-container"
  • "assembling-machine"
  • "arithmetic-combinator"
  • "decider-combinator"
  • "constant-combinator"
  • "boiler"
  • "electric-pole"
  • "mining-drill"
  • "radar"
  • "storage-tank"
  • "tree"
  • "turret"
  • "beacon"
  • "furnace"
  • "lab"
Sander_Bouwhuis
Filter Inserter
Filter Inserter
Posts: 292
Joined: Mon Dec 07, 2015 10:45 pm
Contact:

Re: [MOD 0.12.X] Squeak Through 1.1.0

Post by Sander_Bouwhuis »

Oooooooooooooooooooooooohhhhhhhhhhhhhhhh, thank you , thank you, thank you!!!!!

Bumping into things, especially in oil production facilities is a HUGE and UNNECESSARY annoyance.
Supercheese
Filter Inserter
Filter Inserter
Posts: 841
Joined: Mon Sep 14, 2015 7:40 am
Contact:

Re: [MOD 0.12.X] Squeak Through 1.1.0

Post by Supercheese »

Sander_Bouwhuis wrote:Oooooooooooooooooooooooohhhhhhhhhhhhhhhh, thank you , thank you, thank you!!!!!

Bumping into things, especially in oil production facilities is a HUGE and UNNECESSARY annoyance.
Indeed it is, those were my thoughts exactly. :)
User avatar
steinio
Smart Inserter
Smart Inserter
Posts: 2638
Joined: Sat Mar 12, 2016 4:19 pm
Contact:

Re: [MOD 0.12.X] Squeak Through 1.1.0

Post by steinio »

Hello,

i get this error if i start with uranium power and squeak through.

Greetings steinio
Attachments
Squeak Through.png
Squeak Through.png (24.64 KiB) Viewed 59474 times
Image

Transport Belt Repair Man

View unread Posts
User avatar
Winseven4lyf
Inserter
Inserter
Posts: 27
Joined: Fri Apr 08, 2016 7:20 am
Contact:

Re: [MOD 0.12.X] Squeak Through 1.1.0

Post by Winseven4lyf »

steinio wrote:Hello,

i get this error if i start with uranium power and squeak through.

Greetings steinio
@steinio, I believe this is because the "lube-port" was resized, and the pipe connection point is probably too far away now, and probably invalid. I have no idea how to fix your problem though ;)
Image
Nommy
Burner Inserter
Burner Inserter
Posts: 9
Joined: Fri Oct 23, 2015 11:37 am
Contact:

Re: [MOD 0.12.X] Squeak Through 1.1.0

Post by Nommy »

Winseven4lyf wrote:
steinio wrote:Hello,

i get this error if i start with uranium power and squeak through.

Greetings steinio
@steinio, I believe this is because the "lube-port" was resized, and the pipe connection point is probably too far away now, and probably invalid. I have no idea how to fix your problem though ;)
@Winseven4lyf, yeah, I think you're right.

@steinio, you can fix this by commenting out the storage-tank line in data-final-fixes.lua to disable resizing of that the same way pump is disabled.
  1. Unzip Squeak Through_1.1.0.zip into the folder which it's in then delete the zip file (it works just the same when extracted).
  2. Open the data-final-fixes.lua file in the extracted mod folder in notepad or any text editor.
  3. Put -- in front of ["storage-tank"] on line 23 and save. It should work now when you restart factorio.
So it should look like this:

Code: Select all

	-- ["pump"]                    = 0.42, -- Removed for compatibility with Rail Tanker mod
	["radar"]                   = 0.25,
	-- ["storage-tank"]            = 0.25,
	["tree"]                    = 0.25,

Lupin wrote:I had problems with the dynamic code above with mods that add entities with a 0,0-collision box (like "Bio Farm" or "Powered Entities"). I got an error along the line "colliosion box must contain point {0,0}"
I added the following lines checking, if the coordinate would be less than 0 and set it to 0 in that case. It seems to have solved the problem.

Code: Select all

	-- Reduce the coordinate to make the gap large enough if it is not already.
	if existing_gap < required_gap then
		coordinate = coordinate + existing_gap - required_gap
		if coordinate < 0 then
			coordinate = 0
		end
	end
@Lupin, that looks good to me too. I foresaw this problem but had stopped playing and never got around to doing a fix, so sorry about that and thanks for sorting it out.




Adding mod compatibility config

I was just setting up some code to allow specifying which stuff should not be resized when certain mods are loaded in a config like this:

Code: Select all

exclusions = {

   {  -- UraniumPower mod
      apply_when_object_exists = {
         type = "storage-tank",
         name = "lube-port"
      },
      prototype_type_exclusions = {       -- exclude by type
         "storage-tank",
         "pump"
      }
   },

   {  -- Another mod
      apply_when_object_exists = {
         type = "accumulator",
         name = "amazing-accumulator"
      },
      prototype_exclusions = {          -- exclude specific prototypes
         "amazing-accumulator",
         "super-amazing-accumulator"
      }
   },

   {  -- Permanent exclusions           (no apply_when_object_exists)
      prototype_exclusions = {
         "thing-to-never-resize",
         "another-thing-to-never-resize"
      }
   },

}
The apply_when_object_exists part is to tell it an object the mod adds, like a prototype, recipe or tech or something which it can search for to determine if the mod is loaded.

Then you can list prototype types or specific prototypes which should not be resized when that mod is running. I was also thinking to make it so you could define a list of specific prototypes to never resize by adding an entry without the apply_when_object_exists part.

I'm probably not going to be around for long again, but maybe that might make maintaining it easier, IDK.

@Supercheese, would this be useful do you think?

Do you or anyone else have any other ideas, suggestions or stuff you want added?

Now's the time because I'll likely fiddle around for a few days then not end up checking this forum again in ages ;D
Sander_Bouwhuis
Filter Inserter
Filter Inserter
Posts: 292
Joined: Mon Dec 07, 2015 10:45 pm
Contact:

Re: [MOD 0.12.X] Squeak Through 1.1.0

Post by Sander_Bouwhuis »

Question : If I want the collision boxess to be as small as possible, what would I set the parameters to?

I constantly get stuck on mining drills which is annoying. The parameter is 0.25 now. Should I set it to 0?
Or 1? Or something else?
Post Reply

Return to “Mods”