M
Description
For the Instrument Master badge. Right shift to toggle. Not tested on mobile, should work tho.
GAME[将] Shogun's Reign
UPDATEDOct 10, 2026
ACCESSKeyless
PLATFORMDesktop
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
--[[rscripts:analytics:start]]
-- Script analytics (enabled by the creator on rscripts.net).
-- Runs in its own thread and cannot affect the script below.
task.spawn(function()
pcall(function()
loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6abb2a17678d6101b6981215"))()
end)
end)
--[[rscripts:analytics:end]]
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local VIM = game:GetService("VirtualInputManager")
local UIS = game:GetService("UserInputService")
local genv = (getgenv and getgenv()) or _G
local prev = genv.__ShamisenAuto
if prev then
prev.stop = true
if prev.conn then pcall(function() prev.conn:Disconnect() end) end
if prev.toggleConn then pcall(function() prev.toggleConn:Disconnect() end) end
end
local CONFIG = { on = true, autoSelect = false, song = nil, toggleKey = Enum.KeyCode.RightShift }
local state = { stop=false, on=CONFIG.on, autoSelect=CONFIG.autoSelect, song=CONFIG.song,
toggleKey=CONFIG.toggleKey, hits=0, misses=0, resets=0, selectedAt=0 }
genv.__ShamisenAuto = state
local lp = Players.LocalPlayer
local function getRoots()
local sh = lp:FindFirstChild("PlayerGui") and lp.PlayerGui:FindFirstChild("MainUI")
and lp.PlayerGui.MainUI:FindFirstChild("Instruments")
and lp.PlayerGui.MainUI.Instruments:FindFirstChild("Shamisen")
if not sh then return end
local mg = sh:FindFirstChild("Minigame")
return ((mg and mg.Visible) and mg:FindFirstChild("Board")) or nil, sh:FindFirstChild("SongList")
end
local KEY_BY_LANE = { Lane1=Enum.KeyCode.A, Lane2=Enum.KeyCode.S, Lane3=Enum.KeyCode.K, Lane4=Enum.KeyCode.L }
local noteState = setmetatable({}, { __mode="k" })
local boardRef, targetY = nil, 0.76
local function fire(key)
VIM:SendKeyEvent(true, key, false, game)
task.defer(function() task.wait(0.02) VIM:SendKeyEvent(false, key, false, game) end)
state.hits += 1
end
local function trySelectSong(songList) -- optional
if not state.autoSelect or not songList or not songList.Visible then return end
if os.clock() - state.selectedAt < 3 then return end
local container = songList:FindFirstChild("Songs"); if not container then return end
local button = state.song and container:FindFirstChild(state.song)
if not button then
for _, c in ipairs(container:GetChildren()) do
if c:IsA("GuiButton") and c.Visible and c.Name ~= "SongTemplate" then button = c break end
end
end
if button and type(firesignal) == "function" then
state.selectedAt = os.clock()
pcall(function() lp:SetAttribute("PerformanceMode", true) end)
task.defer(function() pcall(function() firesignal(button.Activated) end) end)
end
end
state.conn = RunService.RenderStepped:Connect(function()
if state.stop then if state.conn then state.conn:Disconnect() end return end
local board, songList = getRoots()
if not board then trySelectSong(songList) return end
if not state.on then return end
if board ~= boardRef then boardRef = board; noteState = setmetatable({}, {__mode="k"}); state.resets += 1 end
local target = board:FindFirstChild("Lane1") and board.Lane1:FindFirstChild("Target")
if target then targetY = target.Position.Y.Scale end
for laneName, key in pairs(KEY_BY_LANE) do
local lane = board:FindFirstChild(laneName)
if lane then
for _, c in ipairs(lane:GetChildren()) do
if c.Name == "Note" then
local y = c.Position.Y.Scale
local st = noteState[c]
if not st then
local fresh = { prevY = y, hit = false }; noteState[c] = fresh
if y >= targetY - 0.08 and y <= targetY + 0.06 then fire(key); fresh.hit = true
elseif y > targetY + 0.06 then state.misses += 1; fresh.hit = true end
elseif not st.hit then
if st.prevY < targetY and y >= targetY then fire(key); st.hit = true
elseif y > targetY + 0.06 then state.misses += 1; st.hit = true end
st.prevY = y
end
end
end
end
end
end)
state.toggleConn = UIS.InputBegan:Connect(function(input, processed)
if processed then return end
if input.KeyCode == state.toggleKey then state.on = not state.on end
end)Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place