Satchel // Open-source modern backpack system

A good idea may be

	--ToolName.TextTruncate = Enum.TextTruncate.AtEnd
	ToolName.TextWrapped = true

To show long tool names (probably to the preference of whoever’s using Satchel though)

Still getting reports of it randomly not responding to the hotkey numbers unfortunately

It would be nice if you added a container/storage feature for putting items in crates/boxes.

Screenshot 2024-02-20 221451
Will Satchel receive a UI update to match with roblox’s new user interface?

Yes, please refer to the below.

1 Like

update on this, is chrome-topbar version of satchel still experimental? or is it safe to use for games?

1 Like

It’s stable but I’m looking forward to use TopbarPlus instead of UIShelf because I want to maintain compatibility with TopbarPlus including HD Admin.

I initially didn’t use TopbarPlus since the main repository has been dead for a while and it seemed like it was no longer getting updates but I’m seeing progress.

You can use it and it’s quite stable but no support for HD Admin and TopbarPlus.

1 Like

I see, I understand the decision, I originally wanted to stay away from topbar+ because of the unsustainable bloat that v2 was, but it seems v3 has generally made good improvements overall

1 Like

When will you be moving to support of TopBarPlus if you are looking forward to it?

(Or I guess I am confused, your last reply says no topbarplus support, but at the very top in your docs it says it is supported…)

Thanks

I will try to make sure that the next release will have TopbarPlus support, just like the current version.

I should been more specific but the development build of Satchel, with the new topbar support, doesn’t use TopbarPlus but the current stable version, released to the public, does.

Hello, thank you for this amazing resource! I plan to add it into my game and build off of it as Roblox’s default backpack is severely lacking controllability.

Apologies, I have no clue how to properly use git, so here you go:

While going around and modifying the script, I noticed you run

for _, gamepad: any in pairs(GAMEPAD_INPUT_TYPES) do

on line 1138 & similarly 1128 for mouse in v1.3, or keybindings branch, in order to detect the last used input type. However, you are checking the value of the table instead of the key which is where the input type is stored. This prevents the script from registering the proper inputs.

Additionally, on line 1434:

GuiService.SelectedObject = HotbarFrame:FindFirstChild("1")

This runs without regards to if the player is or isn’t actively using the controller. This causes the player to enter the selection state when opening the backpack via keyboard while a controller is plugged in and prevents all movement.

A simple fix but here's some updated code:
local controllerActive: boolean = false
local function OnUISChanged(): ()
	local lastInput = UserInputService:GetLastInputType()
	
	-- Detect if player is using Touch
	if lastInput == Enum.UserInputType.Touch then
		for i: number = 1, NumberOfHotbarSlots do
			Slots[i]:TurnNumber(false)
		end
		controllerActive = false
		return
	end
	
	-- Detect if player is using Keyboard
	if lastInput == Enum.UserInputType.Keyboard then
		for i: number = 1, NumberOfHotbarSlots do
			Slots[i]:TurnNumber(true)
		end
		controllerActive = false
		return
	end
	
	-- Detect if player is using Mouse
	if MOUSE_INPUT_TYPES[lastInput] then
		for i: number = 1, NumberOfHotbarSlots do
			Slots[i]:TurnNumber(true)
		end
		controllerActive = false
		return
	end
	
	-- Detect if player is using Controller
	if GAMEPAD_INPUT_TYPES[lastInput] then
		for i: number = 1, NumberOfHotbarSlots do
			Slots[i]:TurnNumber(false)
		end
		controllerActive = true
		return
	end
end

...

local function enableGamepadInventoryControl(): ()
	-- Other function code
	
	if not controllerActive then return end
	GuiService.SelectedObject = HotbarFrame:FindFirstChild("1")
end
I also replaced heartbeat with a BindableEvent if that interests you
-- Ensures the ModuleScript "owns" the controller binds in case the requiring script is ever destroyed.
local echo: BindableEvent = Instance.new("BindableEvent")
echo.Event:Connect(OnIconChanged)

-- Sets whether the backpack is enabled or not
function BackpackScript:SetBackpackEnabled(Enabled: boolean): ()
	BackpackEnabled = Enabled
	
	echo:Fire(BackpackEnabled)
end
1 Like

Thanks for your suggestion and improvements. I’ll review the code and test it later but from the looks of it, it looks all good. Thanks again

1 Like

Is there a way to only have the HotBar and remove the Inventory

How do you make it save so when the player has tools, and they place them in different slots and when you rejoin it saves, normally it isn’t like that.

At the top , can you list what devices Satchel supports? I assume PC, and you mention mobile… what about xbox, vr , etc… thanks

Currently no but I do plan later to be able to disable opening the inventory.

You can find all the platforms Satchel supports by viewing the Platform page on our documentation.

In short, we support computer, phone, tablet, console, and VR.

For more information about screen sizes and platform differences see the below documentation.

You can save in which order tools are assigned (or which order their stores in Satchel) and then when the player joins, assign the tools back in the same order.

Are you no longer updating the model with the latest fixes?

or is the opensourced game newer then the model?

also is it required to use topbar?

It’s still being updated, but it’s only with the stable releases which I haven’t released in a while. I plan to eventually move to packages so you can more easily update Satchel.

The open-source playground uses an experimental version, mostly so I can test with different platforms (mobile, console, VR, etc.) I don’t recommend using it since it can be unstable.

With how the code is structured, yes. I’m planning to move to TopbarPlus v3 instead of v2 so that should fix your errors. The main on GitHub uses UIShelf which was just discontinued this week so that’s going to be fun to migrate again (TopbarPlus v2 > UIShelf > TopbarPlus v3.)

1 Like