Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import math
- import struct
- import socket
- import pygame
- TARGET = ("192.168.1.10", 8080)
- KEY_A = (1 << 0) # A
- KEY_B = (1 << 1) # B
- KEY_X = (1 << 2) # X
- KEY_Y = (1 << 3) # Y
- KEY_LSTICK = (1 << 4) # Left Stick Button
- KEY_RSTICK = (1 << 5) # Right Stick Button
- KEY_L = (1 << 6) # L
- KEY_R = (1 << 7) # R
- KEY_ZL = (1 << 8) # ZL
- KEY_ZR = (1 << 9) # ZR
- KEY_PLUS = (1 << 10) # Plus
- KEY_MINUS = (1 << 11) # Minus
- KEY_DLEFT = (1 << 12) # D-Pad Left
- KEY_DUP = (1 << 13) # D-Pad Up
- KEY_DRIGHT = (1 << 14) # D-Pad Right
- KEY_DDOWN = (1 << 15) # D-Pad Down
- KEY_LSTICK_LEFT = (1 << 16) # Left Stick Left
- KEY_LSTICK_UP = (1 << 17) # Left Stick Up
- KEY_LSTICK_RIGHT = (1 << 18) # Left Stick Right
- KEY_LSTICK_DOWN = (1 << 19) # Left Stick Down
- KEY_RSTICK_LEFT = (1 << 20) # Right Stick Left
- KEY_RSTICK_UP = (1 << 21) # Right Stick Up
- KEY_RSTICK_RIGHT = (1 << 22) # Right Stick Right
- KEY_RSTICK_DOWN = (1 << 23) # Right Stick Down
- KEY_SL_LEFT = (1 << 24) # SL on Left Joy-Con
- KEY_SR_LEFT = (1 << 25) # SR on Left Joy-Con
- KEY_SL_RIGHT = (1 << 26) # SL on Right Joy-Con
- KEY_SR_RIGHT = (1 << 27) # SR on Right Joy-Con
- JOYSTICK_MAX = (+0x8000)
- JOYSTICK_MIN = (-0x8000)
- def main(argv):
- _socket = \
- socket.socket(
- socket.AF_INET,
- socket.SOCK_DGRAM
- )
- pygame.init()
- pygame.event.set_grab(True)
- pygame.display.set_caption("Splatoon MKB")
- clock = pygame.time.Clock()
- screen = pygame.display.set_mode((500,500), 0)
- font = pygame.font.SysFont("Consolas", 20)
- stop = False
- ticks = 0
- toggle_value = True
- toggle_key_new = False
- toggle_key_old = False
- while True:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- stop = True
- input_keys = pygame.key.get_pressed()
- input_mouse_btn = pygame.mouse.get_pressed()
- input_mouse_pos = (
- (pygame.mouse.get_pos()[0] - 250),
- (pygame.mouse.get_pos()[1] - 250)
- )
- # handle exit key
- if input_keys[pygame.K_ESCAPE]:
- stop = True
- # stop if necessary
- if stop:
- break
- # handle toggle key
- toggle_key_new = input_keys[pygame.K_RSHIFT]
- if toggle_key_old != toggle_key_new:
- if toggle_key_new:
- toggle_value = (toggle_value != True)
- toggle_key_old = toggle_key_new
- # defaults
- packet_keys = 0
- packet_joy_l_x = 0
- packet_joy_l_y = 0
- packet_joy_r_x = 0
- packet_joy_r_y = 0
- # bind gameplay controls
- if input_mouse_btn[0]: packet_keys |= KEY_ZR # shoot
- if input_mouse_btn[2]: packet_keys |= KEY_R # use sub
- if input_keys[pygame.K_SPACE]: packet_keys |= KEY_B # jump
- if input_keys[pygame.K_LSHIFT]: packet_keys |= KEY_ZL # swim
- if input_keys[pygame.K_TAB]: packet_keys |= KEY_X # view map
- if input_keys[pygame.K_e]: packet_keys |= KEY_Y # reset camera
- if input_keys[pygame.K_q]: packet_keys |= KEY_RSTICK # use special
- if input_keys[pygame.K_a]: packet_joy_l_x += JOYSTICK_MIN # move left
- if input_keys[pygame.K_d]: packet_joy_l_x += JOYSTICK_MAX # move right
- if input_keys[pygame.K_s]: packet_joy_l_y += JOYSTICK_MIN # move backward
- if input_keys[pygame.K_w]: packet_joy_l_y += JOYSTICK_MAX # move forward
- # bind general menu controls
- if input_keys[pygame.K_UP]: packet_keys |= KEY_DUP
- if input_keys[pygame.K_DOWN]: packet_keys |= KEY_DDOWN
- if input_keys[pygame.K_LEFT]: packet_keys |= KEY_DLEFT
- if input_keys[pygame.K_RIGHT]: packet_keys |= KEY_DRIGHT
- if input_keys[pygame.K_RETURN]: packet_keys |= KEY_A
- if input_keys[pygame.K_BACKSPACE]: packet_keys |= KEY_B
- if input_keys[pygame.K_1]: packet_keys |= KEY_A
- if input_keys[pygame.K_2]: packet_keys |= KEY_B
- if input_keys[pygame.K_3]: packet_keys |= KEY_X
- if input_keys[pygame.K_4]: packet_keys |= KEY_Y
- if input_keys[pygame.K_5]: packet_keys |= KEY_PLUS
- if input_keys[pygame.K_6]: packet_keys |= KEY_MINUS
- # sensitivity
- sens_x = 600
- sens_y = 500
- # map mouse movement to joystick
- packet_joy_r_x += (+(input_mouse_pos[0] * sens_x))
- packet_joy_r_y += (-(input_mouse_pos[1] * sens_y))
- # bypass the high vertical deadzone (min 4916 to move)
- if packet_joy_r_y > 0: packet_joy_r_y += (+(4916-sens_y))
- if packet_joy_r_y < 0: packet_joy_r_y += (-(4916-sens_y))
- # give horizontal movement a start speed similar to vertical
- if packet_joy_r_x > 0: packet_joy_r_x += (+600)
- if packet_joy_r_x < 0: packet_joy_r_x += (-600)
- # add a curve to horizontal movement to make it closer to vertical
- if packet_joy_r_x > 0: packet_joy_r_x = int(+(math.pow(+(packet_joy_r_x), 0.7) * 15))
- if packet_joy_r_x < 0: packet_joy_r_x = int(-(math.pow(-(packet_joy_r_x), 0.7) * 15))
- # make sure joysticks don't overflow
- if packet_joy_r_x > JOYSTICK_MAX: packet_joy_r_x = JOYSTICK_MAX
- if packet_joy_r_x < JOYSTICK_MIN: packet_joy_r_x = JOYSTICK_MIN
- if packet_joy_r_y > JOYSTICK_MAX: packet_joy_r_y = JOYSTICK_MAX
- if packet_joy_r_y < JOYSTICK_MIN: packet_joy_r_y = JOYSTICK_MIN
- packet = b""
- packet += struct.pack("<H", 0x3275)
- packet += struct.pack("<Q", packet_keys)
- packet += struct.pack("<i", packet_joy_l_x)
- packet += struct.pack("<i", packet_joy_l_y)
- packet += struct.pack("<i", packet_joy_r_x)
- packet += struct.pack("<i", packet_joy_r_y)
- if toggle_value:
- _socket.sendto(packet, TARGET)
- if pygame.key.get_focused():
- pygame.mouse.set_pos((250,250))
- screen.fill((0,0,0))
- texts = [
- "on: {}".format(toggle_value),
- "keys: 0x{:08X}".format(packet_keys),
- "mouse in: {:+04d} {:+04d}".format(*input_mouse_pos),
- "mouse out: {:+07d} {:+07d}".format(packet_joy_r_x, packet_joy_r_y),
- ]
- for idx, val in enumerate(texts):
- screen.blit(font.render(val, True, (255,255,255)), (10,(6+(18*idx))))
- pygame.display.flip()
- clock.tick(60)
- ticks += 1
- continue
- return 0
- if __name__ == "__main__":
- sys.exit(main(sys.argv))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement