def add_juicebox_info(metadata: 'Metadata'):
    #Hmm... apparently there's 0x220 bytes at the beginning which need to be copied from retail carts to get homebrew test ROMs to boot
    builtin_gamepad = NormalController()
    builtin_gamepad.face_buttons = 5  #Rewind/forward/stop/play/function
    metadata.input_info.add_option(builtin_gamepad)

    metadata.save_type = SaveType.Nothing  #Nope!
def add_mega_duck_info(metadata: 'Metadata'):
    builtin_gamepad = NormalController()
    builtin_gamepad.dpads = 1
    builtin_gamepad.face_buttons = 2
    metadata.input_info.add_option(builtin_gamepad)
    #Until proven otherwise
    metadata.save_type = SaveType.Nothing
def add_gamecom_info(metadata: 'Metadata'):
    builtin_gamepad = NormalController()
    builtin_gamepad.dpads = 1
    builtin_gamepad.face_buttons = 4  #A B C D
    touchscreen = Touchscreen()
    metadata.input_info.add_option(
        CombinedController([builtin_gamepad, touchscreen]))
def add_pokemini_info(metadata: 'Metadata'):
    builtin_gamepad = NormalController()

    builtin_gamepad.dpads = 1
    builtin_gamepad.face_buttons = 2  #A B
    builtin_gamepad.shoulder_buttons = 1  #C
    metadata.input_info.add_option(builtin_gamepad)
def add_entex_adventure_vision_info(metadata: 'Metadata'):
    builtin_gamepad = NormalController()
    builtin_gamepad.dpads = 1
    builtin_gamepad.face_buttons = 4  #Physically, they're on both sides of the system, but those are duplicates (for ambidextrousity)
    metadata.input_info.add_option(builtin_gamepad)

    #I don't think so mate
    metadata.save_type = SaveType.Nothing
def add_super_cassette_vision_info(metadata: 'Metadata'):
    keypad = Keypad()  #Part of main body of console
    keypad.keys = 12  #Digits + CL EN

    joystick = NormalController()  #2 of them hardwired in
    joystick.face_buttons = 2

    metadata.input_info.add_option([keypad, joystick])
def add_casio_pv1000_info(metadata: 'Metadata'):
    builtin_gamepad = NormalController()
    builtin_gamepad.dpads = 1
    builtin_gamepad.face_buttons = 2
    metadata.input_info.add_option(builtin_gamepad)
    #(Start, select,) A, and B. And to think some things out there say it only has 1 button... Well, I've also heard start and select are on the console, so maybe MAME is being a bit weird

    #Until proven otherwise
    metadata.save_type = SaveType.Nothing
def add_bandai_sv8000_info(metadata: 'Metadata'):
    keypad = Keypad()  #2 of these
    keypad.keys = 12  #Digits + # *
    joystick = NormalController()
    joystick.dpads = 1  #Keypad with a disc thing on it

    metadata.save_type = SaveType.Nothing  #I think not

    controller = CombinedController([keypad, joystick])
    metadata.input_info.add_option(controller)
def add_arcadia_info(metadata: 'Metadata'):
    keypad = Keypad(
    )  #2 controllers hardwired into the system. If MAME is any indication, the buttons on the side don't do anything or are equivalent to keypad 2?
    keypad.keys = 12  #MAME mentions 16 here... maybe some variant systems have more
    stick = NormalController()
    stick.analog_sticks = 1  #According to MAME it's an analog stick but everywhere else suggests it's just digital?
    #controller.face_buttons = 2 #???? Have also heard that the 2 buttons do the same thing as each other
    controller = CombinedController([keypad, stick])
    metadata.input_info.add_option(controller)

    #Until proven otherwise
    metadata.save_type = SaveType.Nothing
def add_vc4000_info(metadata: 'Metadata'):
    normal_controller = NormalController()
    normal_controller.analog_sticks = 1
    normal_controller.face_buttons = 2

    keypad = Keypad()
    keypad.keys = 12

    controller = CombinedController([normal_controller, keypad])
    metadata.input_info.add_option(controller)

    #Until proven otherwise
    metadata.save_type = SaveType.Nothing
def add_astrocade_info(metadata: 'Metadata'):
    joystick = NormalController()
    joystick.dpads = 1
    joystick.face_buttons = 1  #Sort of a trigger button, as it's a gun-shaped grip
    #Controller also integrates a paddle

    keypad = Keypad()  #Mounted onto the system
    keypad.keys = 24

    controller = CombinedController([joystick, keypad, Paddle()])
    metadata.input_info.add_option(controller)

    #Until proven otherwise
    metadata.save_type = SaveType.Nothing
def add_psp_info(metadata: 'Metadata'):
    builtin_gamepad = NormalController()
    builtin_gamepad.dpads = 1
    builtin_gamepad.analog_sticks = 1
    builtin_gamepad.face_buttons = 4  #also Start, Select, which I don't count because I just never have I guess
    builtin_gamepad.shoulder_buttons = 2
    metadata.input_info.add_option(builtin_gamepad)
def add_3ds_info(metadata: 'Metadata'):
    #Although we can't know for sure if the game uses the touchscreen, it's safe to assume that it probably does
    builtin_gamepad = NormalController()
    builtin_gamepad.analog_sticks = 1
    builtin_gamepad.dpads = 1
    builtin_gamepad.face_buttons = 4
    builtin_gamepad.shoulder_buttons = 2

    controller = CombinedController([builtin_gamepad, Touchscreen()])
    metadata.input_info.add_option(controller)
def add_nichibutsu_my_vision_info(metadata: 'Metadata'):
    buttons = NormalController()  #Not normal, but closest there is
    #It's like a keyboard except not; MAME defines it as 14-button "mahjong" + 8-way joystick with 1 button and hmm
    buttons.face_buttons = 19  #Numbered 1 to 14 in a row, then A B C D arranged in directions above that, and an E button next to that
    metadata.input_info.add_option(buttons)
def add_bbc_bridge_companion_info(metadata: 'Metadata'):
    buttons = NormalController()
    buttons.face_buttons = 10  #According to the MAME driver, I'm too lazy to look at pictures of the thing
    metadata.input_info.add_option(buttons)

    metadata.save_type = SaveType.Nothing  #Yeah nah
def add_lynx_info(metadata: 'Metadata'):
    builtin_gamepad = NormalController()
    builtin_gamepad.dpads = 1
    builtin_gamepad.face_buttons = 4  #Option 1, Option 2, A, B; these are flipped so you might think there's 8
    metadata.input_info.add_option(builtin_gamepad)
def add_virtual_boy_info(metadata: 'Metadata'):
    gamepad = NormalController()
    gamepad.face_buttons = 2
    gamepad.shoulder_buttons = 2
    gamepad.dpads = 2
    metadata.input_info.add_option(gamepad)
def add_vectrex_info(metadata: 'Metadata'):
    gamepad = NormalController()
    gamepad.face_buttons = 4  #All arranged in a row, not rectangle
    gamepad.analog_sticks = 1
    metadata.input_info.add_option(gamepad)
def add_vsmile_info(metadata: 'Metadata'):
    controller = NormalController()
    controller.analog_sticks = 1  #Hmm MAME has it as a digital joystick with 8 buttons but Wikipedia says analog, whomst is correct? I dunno
    controller.face_buttons = 4  #Also enter + Learning Zone + exit + help

    metadata.input_info.add_option(controller)
def add_wonderswan_info(metadata: 'Metadata'):
    builtin_gamepad = NormalController()
    builtin_gamepad.dpads = 1
    #Because of the rotation, it's hard to say which one of the sets of 4 buttons is the one used for directional control; but one of them will be
    builtin_gamepad.face_buttons = 6
    metadata.input_info.add_option(builtin_gamepad)
def add_cd32_info(metadata: 'Metadata'):
    builtin_gamepad = NormalController()
    builtin_gamepad.dpads = 1
    builtin_gamepad.face_buttons = 4
    builtin_gamepad.shoulder_buttons = 2
    metadata.input_info.add_option(builtin_gamepad)
def add_benesse_v2_info(metadata: 'Metadata'):
    builtin_gamepad = NormalController()
    builtin_gamepad.dpads = 1
    builtin_gamepad.face_buttons = 3  #I don't know what they're called
    metadata.input_info.add_option(builtin_gamepad)
def add_neogeo_cd_info(metadata: 'Metadata'):
    #Apparently there is a mahjong controller too, but... meh
    builtin_gamepad = NormalController()
    builtin_gamepad.dpads = 1
    builtin_gamepad.face_buttons = 4
    metadata.input_info.add_option(builtin_gamepad)
def add_vsmile_babby_info(metadata: 'Metadata'):
    controller = NormalController()
    controller.face_buttons = 6  #5 shapes + "fun button" (aka cloud) + apparently the ball is actually just a button; also exit

    metadata.input_info.add_option(controller)
def add_hartung_game_master_info(metadata: 'Metadata'):
    builtin_gamepad = NormalController()
    builtin_gamepad.dpads = 1
    builtin_gamepad.face_buttons = 2
    metadata.input_info.add_option(builtin_gamepad)
def add_ngp_info(metadata: 'Metadata'):
    builtin_gamepad = NormalController()
    builtin_gamepad.dpads = 1
    builtin_gamepad.face_buttons = 2  #A B, also Option (Option is just Start really but they have to be special and unique and not like the other girls)
    metadata.input_info.add_option(builtin_gamepad)
def add_game_gear_info(metadata: 'Metadata'):
    #Because there's no accessories to make things confusing, we can assume the Game Gear's input info, but not the Master System's
    builtin_gamepad = NormalController()
    builtin_gamepad.dpads = 1
    builtin_gamepad.face_buttons = 2  #'1' on left, '2' on right
    metadata.input_info.add_option(builtin_gamepad)
def add_super_acan_info(metadata: 'Metadata'):
    controller = NormalController()
    controller.shoulder_buttons = 2
    controller.dpads = 1
    controller.face_buttons = 4  #Also Select + Start
    metadata.input_info.add_option(controller)