First MXM 18 Cleared!
arcadeCleared my first 18 difficulty chart in #sdvx
Albeit its not a very difficult one, but I think I’m finally starting to chip away at the 17-18 difficulty wall.
Cleared my first 18 difficulty chart in #sdvx
Albeit its not a very difficult one, but I think I’m finally starting to chip away at the 17-18 difficulty wall.
Switch 2 Pro Controller is very comfy in my hands, but unfortunately it didn’t work out of box on PC (Linux) for me like it’s predacessor. Until there’s actual better driver support for this thing in the kernel (or Valve does something), here’s a hacky Python script to initialize HID-mode on the controller
# I only tested this script on Linux w/ Steam but in theory it shoud work on Windows?
import usb.core # install pyusb first: pip install pyusb
import usb.util
import time
import sys
VENDOR_ID = 0x057E
PRODUCT_IDS = {
0x2066: "Joy-Con (L)",
0x2067: "Joy-Con (R)",
0x2069: "Pro Controller",
0x2073: "GCN Controller"
}
USB_INTERFACE_NUMBER = 1
INIT_COMMAND_0x03 = bytes([0x03, 0x91, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF])
UNKNOWN_COMMAND_0x07 = bytes([0x07, 0x91, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00])
UNKNOWN_COMMAND_0x16 = bytes([0x16, 0x91, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00])
REQUEST_CONTROLLER_MAC = bytes([0x15, 0x91, 0x00, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF])
LTK_REQUEST = bytes([0x15, 0x91, 0x00, 0x02, 0x00, 0x11, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF])
UNKNOWN_COMMAND_0x15_ARG_0x03 = bytes([0x15, 0x91, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00])
UNKNOWN_COMMAND_0x09 = bytes([0x09, 0x91, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
IMU_COMMAND_0x02 = bytes([0x0c, 0x91, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00])
OUT_UNKNOWN_COMMAND_0x11 = bytes([0x11, 0x91, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00])
UNKNOWN_COMMAND_0x0A = bytes([0x0a, 0x91, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x35, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
IMU_COMMAND_0x04 = bytes([0x0c, 0x91, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00])
ENABLE_HAPTICS = bytes([0x03, 0x91, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00])
OUT_UNKNOWN_COMMAND_0x10 = bytes([0x10, 0x91, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00])
OUT_UNKNOWN_COMMAND_0x01 = bytes([0x01, 0x91, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00])
OUT_UNKNOWN_COMMAND_0x03 = bytes([0x03, 0x91, 0x00, 0x01, 0x00, 0x00, 0x00])
OUT_UNKNOWN_COMMAND_0x0A_ALT = bytes([0x0a, 0x91, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00])
def send_usb_data(ep_out, ep_in, data, description=""):
try:
ep_out.write(data)
time.sleep(0.01)
try:
response = ep_in.read(32, timeout=100)
hex_resp = " ".join([f"{x:02x}" for x in response])
print(f"[{description}] Response: {hex_resp}")
except usb.core.USBError as e:
if e.errno == 110:
print(f"[{description}] No response (Timeout)")
else:
print(f"[{description}] Read Error: {e}")
except usb.core.USBError as e:
print(f"[{description}] Write Error: {e}")
raise
def set_player_leds(ep_out, ep_in, led_mask):
command = [
0x09, 0x91, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00,
led_mask,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
]
send_usb_data(ep_out, ep_in, bytes(command), f"Set LED Mask: 0x{led_mask:02x}")
def connect_usb():
print("Searching for Nintendo Switch Controllers...")
def match_device(dev):
return dev.idVendor == VENDOR_ID and dev.idProduct in PRODUCT_IDS
dev = usb.core.find(custom_match=match_device)
if dev is None:
raise ValueError("Device not found")
product_name = PRODUCT_IDS.get(dev.idProduct, "Unknown Device")
print(f"Found {product_name} (ID: {dev.idProduct:04x})")
if dev.is_kernel_driver_active(USB_INTERFACE_NUMBER):
try:
print("Detaching kernel driver...")
dev.detach_kernel_driver(USB_INTERFACE_NUMBER)
except usb.core.USBError as e:
sys.exit(f"Could not detach kernel driver: {e}")
try:
dev.set_configuration()
print("Configuration set.")
except usb.core.USBError as e:
print(f"Error setting configuration: {e}")
try:
usb.util.claim_interface(dev, USB_INTERFACE_NUMBER)
print(f"Interface {USB_INTERFACE_NUMBER} claimed.")
except usb.core.USBError as e:
sys.exit(f"Could not claim interface: {e}")
cfg = dev.get_active_configuration()
intf = cfg[(USB_INTERFACE_NUMBER,0)]
ep_out = usb.util.find_descriptor(
intf,
custom_match = lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_OUT)
ep_in = usb.util.find_descriptor(
intf,
custom_match =
lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_IN
)
if not ep_out:
sys.exit("Could not find OUT endpoint")
print(f"Found Endpoint OUT: 0x{ep_out.bEndpointAddress:02x}")
print("Starting Initialization Sequence...")
try:
send_usb_data(ep_out, ep_in, INIT_COMMAND_0x03, "Init 0x03")
send_usb_data(ep_out, ep_in, UNKNOWN_COMMAND_0x07, "Unknown 0x07")
send_usb_data(ep_out, ep_in, UNKNOWN_COMMAND_0x16, "Unknown 0x16")
send_usb_data(ep_out, ep_in, REQUEST_CONTROLLER_MAC, "Req MAC")
send_usb_data(ep_out, ep_in, LTK_REQUEST, "Req LTK")
send_usb_data(ep_out, ep_in, UNKNOWN_COMMAND_0x15_ARG_0x03, "Unknown 0x15")
send_usb_data(ep_out, ep_in, UNKNOWN_COMMAND_0x09, "Unknown 0x09")
send_usb_data(ep_out, ep_in, IMU_COMMAND_0x02, "IMU 0x02")
send_usb_data(ep_out, ep_in, OUT_UNKNOWN_COMMAND_0x11, "OUT Unknown 0x11")
send_usb_data(ep_out, ep_in, UNKNOWN_COMMAND_0x0A, "Unknown 0x0A")
send_usb_data(ep_out, ep_in, IMU_COMMAND_0x04, "IMU 0x04")
send_usb_data(ep_out, ep_in, ENABLE_HAPTICS, "Enable Haptics")
send_usb_data(ep_out, ep_in, OUT_UNKNOWN_COMMAND_0x10, "OUT Unknown 0x10")
send_usb_data(ep_out, ep_in, OUT_UNKNOWN_COMMAND_0x01, "OUT Unknown 0x01")
send_usb_data(ep_out, ep_in, OUT_UNKNOWN_COMMAND_0x03, "OUT Unknown 0x03")
send_usb_data(ep_out, ep_in, OUT_UNKNOWN_COMMAND_0x0A_ALT, "OUT Unknown 0x0A Alt")
set_player_leds(ep_out, ep_in, 0x0F)
print("Controller initialization sequence complete! All LEDs should be on.")
except Exception as e:
print(f"Error during sequence: {e}")
if __name__ == "__main__":
try:
connect_usb()
except ValueError as e:
print(e)
except Exception as e:
print(f"Unexpected error: {e}")
Steps
Read more...Its all Bandori. At least 75% of that MyGO!!!!! listening time was probably Haruhikage since I came back to Bandori and had to catch up before watching Ave Mujica anime.
It would seem that I, along with what seems like the entirety of Reddit bought the same cheap 10000mAh power bank and now its getting recalled.
I wonder if it has anything to do with the poor quality they found in that viral Haribo Powerbank. Not sure since I’ve had this one for a long time. I guess I really got what I paid for, shame cause it really is super slim and works well.
Read more...Visited New York during the Thanksgiving break and had a chance to stopped by one of the most legendary landmarks North American arcade gaming history.
Also yep you’re reading that right, it indeed once home to a dancing chicken as well as one that played tic tac toe.
But apart from just being an old arcade, it was also home to one of the largest competitive arcade game fighting scene (Marvel vs Capcom, Street Fighter, etc.). Many of NAs top players frequented this arcade. However, as we all already know video arcades began to die down during the early 2000s and China Town Fair was no exception having closed in 2011.
Read more...I think having control of your own data is great. The same is true for decentralized social media. I’ve always been a primary user of microblog platforms (like Twitter/X). Having experienced both the traditional and “decentralized” approaches to microblogs, they both have some particular shortcoming in terms of what I want to get out of “social media”.
This is fairly self explanatory. The rebranding of Twitter to X and Musk’s new ownership of the platform shifted the direction of the platform to be ever more political. X Premium boosting visibility is also something I wasn’t a particular fan of. You can’t view anything without signing in either, so goodbye viewing stuff anonymously. There’s just a lot of “features” here I’m not a fan of. Needless to say, there’s a lot of reasons to not post stuff there.
Read more...