mirror of https://github.com/PCSX2/pcsx2.git
Pad: Add Pop'n Music controller type
This commit is contained in:
parent
5e191a6cd8
commit
10389dc3f1
|
@ -329,4 +329,13 @@
|
||||||
#define ICON_PF_SHOPPING_CART "\xF0\x9F\x9B\x92"
|
#define ICON_PF_SHOPPING_CART "\xF0\x9F\x9B\x92"
|
||||||
#define ICON_PF_ACHIEVEMENTS_PROGRESSION "\xE2\x8E\xB2"
|
#define ICON_PF_ACHIEVEMENTS_PROGRESSION "\xE2\x8E\xB2"
|
||||||
#define ICON_PF_ACHIEVEMENTS_MISSABLE "\xE2\x8E\xB3"
|
#define ICON_PF_ACHIEVEMENTS_MISSABLE "\xE2\x8E\xB3"
|
||||||
#define ICON_PF_ACHIEVEMENTS_WIN "\xE2\x8E\xB4"
|
#define ICON_PF_ACHIEVEMENTS_WIN "\xE2\x8E\xB4"
|
||||||
|
#define ICON_PF_POPN_BLUE_LEFT "\xE2\x8B\x80"
|
||||||
|
#define ICON_PF_POPN_BLUE_RIGHT "\xE2\x8B\x81"
|
||||||
|
#define ICON_PF_POPN_GREEN_LEFT "\xE2\x8B\x82"
|
||||||
|
#define ICON_PF_POPN_GREEN_RIGHT "\xE2\x8B\x83"
|
||||||
|
#define ICON_PF_POPN_YELLOW_LEFT "\xE2\x8B\x84"
|
||||||
|
#define ICON_PF_POPN_YELLOW_RIGHT "\xE2\x8B\x85"
|
||||||
|
#define ICON_PF_POPN_WHITE_LEFT "\xE2\x8B\x86"
|
||||||
|
#define ICON_PF_POPN_WHITE_RIGHT "\xE2\x8B\x87"
|
||||||
|
#define ICON_PF_POPN_RED "\xE2\x8B\x88"
|
Binary file not shown.
|
@ -64,6 +64,7 @@ target_sources(pcsx2-qt PRIVATE
|
||||||
Settings/ControllerBindingWidget.ui
|
Settings/ControllerBindingWidget.ui
|
||||||
Settings/ControllerBindingWidget_DualShock2.ui
|
Settings/ControllerBindingWidget_DualShock2.ui
|
||||||
Settings/ControllerBindingWidget_Guitar.ui
|
Settings/ControllerBindingWidget_Guitar.ui
|
||||||
|
Settings/ControllerBindingWidget_Popn.ui
|
||||||
Settings/ControllerBindingWidgets.cpp
|
Settings/ControllerBindingWidgets.cpp
|
||||||
Settings/ControllerBindingWidgets.h
|
Settings/ControllerBindingWidgets.h
|
||||||
Settings/ControllerLEDSettingsDialog.ui
|
Settings/ControllerLEDSettingsDialog.ui
|
||||||
|
|
|
@ -0,0 +1,531 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>ControllerBindingWidget_Popn</class>
|
||||||
|
<widget class="QWidget" name="ControllerBindingWidget_Popn">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>1232</width>
|
||||||
|
<height>644</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>1100</width>
|
||||||
|
<height>500</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_35">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="2" rowspan="3">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>400</width>
|
||||||
|
<height>266</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../resources/resources.qrc">:/images/Popn.svg</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" rowspan="3">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2"/>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<layout class="QGridLayout" name="gridLayout_27">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QGroupBox" name="groupBox_21">
|
||||||
|
<property name="title">
|
||||||
|
<string extracomment="Leave this button name as-is.">Select</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_21">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="InputBindingWidget" name="Select">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">PushButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QGroupBox" name="groupBox_22">
|
||||||
|
<property name="title">
|
||||||
|
<string extracomment="Leave this button name as-is.">Yellow (Left)</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_22">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="InputBindingWidget" name="YellowL">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">PushButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="3">
|
||||||
|
<widget class="QGroupBox" name="groupBox_24">
|
||||||
|
<property name="title">
|
||||||
|
<string extracomment="Leave this button name as-is.">Yellow (Right)</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_24">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="InputBindingWidget" name="YellowR">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">PushButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<widget class="QGroupBox" name="groupBox_26">
|
||||||
|
<property name="title">
|
||||||
|
<string extracomment="Leave this button name as-is or uppercase it entirely.">Blue (Right)</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_26">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="InputBindingWidget" name="BlueR">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">PushButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QGroupBox" name="groupBox_25">
|
||||||
|
<property name="title">
|
||||||
|
<string extracomment="Leave this button name as-is or uppercase it entirely.">Blue (Left)</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_25">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="InputBindingWidget" name="BlueL">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">PushButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QGroupBox" name="groupBox_23">
|
||||||
|
<property name="title">
|
||||||
|
<string extracomment="Leave this button name as-is.">Start</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_23">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="InputBindingWidget" name="Start">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">PushButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<layout class="QGridLayout" name="gridLayout_32">
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QGroupBox" name="groupBox_34">
|
||||||
|
<property name="title">
|
||||||
|
<string>Red</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_34">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="InputBindingWidget" name="Red">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>150</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">PushButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" colspan="5">
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="3">
|
||||||
|
<widget class="QGroupBox" name="groupBox_28">
|
||||||
|
<property name="title">
|
||||||
|
<string extracomment="Leave this button name as-is.">Green (Right)</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_29">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="InputBindingWidget" name="GreenR">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>150</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">PushButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QGroupBox" name="groupBox_27">
|
||||||
|
<property name="title">
|
||||||
|
<string extracomment="Leave this button name as-is.">White (Left)</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_28">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="InputBindingWidget" name="WhiteL">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>150</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">PushButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QGroupBox" name="groupBox_29">
|
||||||
|
<property name="title">
|
||||||
|
<string extracomment="Leave this button name as-is.">Green (Left)</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_30">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="InputBindingWidget" name="GreenL">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>150</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">PushButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="4">
|
||||||
|
<widget class="QGroupBox" name="groupBox_30">
|
||||||
|
<property name="title">
|
||||||
|
<string extracomment="Leave this button name as-is.">White (Right)</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_31">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="InputBindingWidget" name="WhiteR">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>150</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>100</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">PushButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>InputBindingWidget</class>
|
||||||
|
<extends>QPushButton</extends>
|
||||||
|
<header>Settings/InputBindingWidget.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources>
|
||||||
|
<include location="../resources/resources.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -108,6 +108,10 @@ void ControllerBindingWidget::onTypeChanged()
|
||||||
{
|
{
|
||||||
m_bindings_widget = ControllerBindingWidget_Guitar::createInstance(this);
|
m_bindings_widget = ControllerBindingWidget_Guitar::createInstance(this);
|
||||||
}
|
}
|
||||||
|
else if (cinfo->type == Pad::ControllerType::Popn)
|
||||||
|
{
|
||||||
|
m_bindings_widget = ControllerBindingWidget_Popn::createInstance(this);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_bindings_widget = new ControllerBindingWidget_Base(this);
|
m_bindings_widget = new ControllerBindingWidget_Base(this);
|
||||||
|
@ -897,6 +901,27 @@ ControllerBindingWidget_Base* ControllerBindingWidget_Guitar::createInstance(Con
|
||||||
return new ControllerBindingWidget_Guitar(parent);
|
return new ControllerBindingWidget_Guitar(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ControllerBindingWidget_Popn::ControllerBindingWidget_Popn(ControllerBindingWidget* parent)
|
||||||
|
: ControllerBindingWidget_Base(parent)
|
||||||
|
{
|
||||||
|
m_ui.setupUi(this);
|
||||||
|
initBindingWidgets();
|
||||||
|
}
|
||||||
|
|
||||||
|
ControllerBindingWidget_Popn::~ControllerBindingWidget_Popn()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QIcon ControllerBindingWidget_Popn::getIcon() const
|
||||||
|
{
|
||||||
|
return QIcon::fromTheme("Popn-line");
|
||||||
|
}
|
||||||
|
|
||||||
|
ControllerBindingWidget_Base* ControllerBindingWidget_Popn::createInstance(ControllerBindingWidget* parent)
|
||||||
|
{
|
||||||
|
return new ControllerBindingWidget_Popn(parent);
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
USBDeviceWidget::USBDeviceWidget(QWidget* parent, ControllerSettingsWindow* dialog, u32 port)
|
USBDeviceWidget::USBDeviceWidget(QWidget* parent, ControllerSettingsWindow* dialog, u32 port)
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "ui_ControllerBindingWidget.h"
|
#include "ui_ControllerBindingWidget.h"
|
||||||
#include "ui_ControllerBindingWidget_DualShock2.h"
|
#include "ui_ControllerBindingWidget_DualShock2.h"
|
||||||
#include "ui_ControllerBindingWidget_Guitar.h"
|
#include "ui_ControllerBindingWidget_Guitar.h"
|
||||||
|
#include "ui_ControllerBindingWidget_Popn.h"
|
||||||
#include "ui_ControllerMacroWidget.h"
|
#include "ui_ControllerMacroWidget.h"
|
||||||
#include "ui_ControllerMacroEditWidget.h"
|
#include "ui_ControllerMacroEditWidget.h"
|
||||||
#include "ui_USBDeviceWidget.h"
|
#include "ui_USBDeviceWidget.h"
|
||||||
|
@ -199,6 +200,22 @@ private:
|
||||||
Ui::ControllerBindingWidget_Guitar m_ui;
|
Ui::ControllerBindingWidget_Guitar m_ui;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ControllerBindingWidget_Popn final : public ControllerBindingWidget_Base
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
ControllerBindingWidget_Popn(ControllerBindingWidget* parent);
|
||||||
|
~ControllerBindingWidget_Popn();
|
||||||
|
|
||||||
|
QIcon getIcon() const override;
|
||||||
|
|
||||||
|
static ControllerBindingWidget_Base* createInstance(ControllerBindingWidget* parent);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::ControllerBindingWidget_Popn m_ui;
|
||||||
|
};
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class USBDeviceWidget final : public QWidget
|
class USBDeviceWidget final : public QWidget
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -419,9 +419,10 @@
|
||||||
<QtUi Include="Settings\ControllerMacroWidget.ui">
|
<QtUi Include="Settings\ControllerMacroWidget.ui">
|
||||||
<FileType>Document</FileType>
|
<FileType>Document</FileType>
|
||||||
</QtUi>
|
</QtUi>
|
||||||
|
<None Include="Settings\ControllerBindingWidget_Popn.ui" />
|
||||||
<None Include="Settings\FolderSettingsWidget.ui" />
|
<None Include="Settings\FolderSettingsWidget.ui" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<Import Project="$(SolutionDir)common\vsprops\QtCompile.targets" />
|
<Import Project="$(SolutionDir)common\vsprops\QtCompile.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets" />
|
<ImportGroup Label="ExtensionTargets" />
|
||||||
</Project>
|
</Project>
|
|
@ -638,6 +638,9 @@
|
||||||
<None Include="Settings\FolderSettingsWidget.ui">
|
<None Include="Settings\FolderSettingsWidget.ui">
|
||||||
<Filter>Settings</Filter>
|
<Filter>Settings</Filter>
|
||||||
</None>
|
</None>
|
||||||
|
<None Include="Settings\ControllerBindingWidget_Popn.ui">
|
||||||
|
<Filter>Settings</Filter>
|
||||||
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<QtTs Include="Translations\pcsx2-qt_en.ts">
|
<QtTs Include="Translations\pcsx2-qt_en.ts">
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 27.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="pop_icon" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 150 150" style="enable-background:new 0 0 150 150;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#1D1D1B;}
|
||||||
|
</style>
|
||||||
|
<g id="by_maxihplay">
|
||||||
|
<path class="st0" d="M146.9,100.4l-0.1-0.3L131.5,43c-1.2-6.7-6.9-9.5-13.8-9.5H32.3c-6.8,0-12.6,2.8-13.8,9.5L3.3,99.8l-0.1,0.7
|
||||||
|
c-0.6,4,0.6,8.1,3.2,11.2s6.5,4.9,10.6,4.9H133c4.1,0,7.9-1.8,10.6-4.9C146.3,108.6,147.5,104.5,146.9,100.4L146.9,100.4z M54.5,44
|
||||||
|
c0.7-2.5,2.8-3.4,4.8-2.9s3.2,2.7,2.7,4.8c-0.8,2.9-6.2,7.8-6.2,7.8S53.7,47,54.5,44z M41.4,49c0.8-2.9,6.2-7.8,6.2-7.8
|
||||||
|
s2.1,6.8,1.2,9.8c-0.7,2.5-2.8,3.4-4.8,2.9S40.8,51.1,41.4,49z M23.7,105.3c-5.5,0-10-4.5-10-10s4.5-10,10-10s10,4.5,10,10
|
||||||
|
S29.2,105.3,23.7,105.3z M26.5,70.4c0-5.5,4.5-10,10-10s10,4.5,10,10s-4.5,10-10,10S26.5,76,26.5,70.4z M49.3,105.3
|
||||||
|
c-5.5,0-10-4.5-10-10s4.5-10,10-10s10,4.5,10,10S54.9,105.3,49.3,105.3z M52.2,70.4c0-5.5,4.5-10,10-10s10,4.5,10,10s-4.5,10-10,10
|
||||||
|
S52.2,76,52.2,70.4z M75,105.3c-5.5,0-10-4.5-10-10s4.5-10,10-10s10,4.5,10,10S80.5,105.3,75,105.3z M77.8,70.4c0-5.5,4.5-10,10-10
|
||||||
|
s10,4.5,10,10s-4.5,10-10,10S77.8,76,77.8,70.4z M100.7,105.3c-5.5,0-10-4.5-10-10s4.5-10,10-10s10,4.5,10,10
|
||||||
|
S106.2,105.3,100.7,105.3z M103.5,70.4c0-5.5,4.5-10,10-10s10,4.5,10,10s-4.5,10-10,10S103.5,76,103.5,70.4z M126.3,105.3
|
||||||
|
c-5.5,0-10-4.5-10-10s4.5-10,10-10s10,4.5,10,10S131.9,105.3,126.3,105.3z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg id="pop_icon" data-name="pop icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 150">
|
||||||
|
<defs>
|
||||||
|
<style>
|
||||||
|
.cls-1 {
|
||||||
|
fill: #fff;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g id="by_maxihplay" data-name="by maxihplay">
|
||||||
|
<path class="cls-1" d="m146.87,100.43l-.05-.33-15.35-57.11c-1.2-6.7-6.93-9.52-13.77-9.52H32.3c-6.84,0-12.57,2.82-13.77,9.52L3.26,99.78l-.14.66c-.61,4.04.56,8.13,3.22,11.22,2.66,3.09,6.53,4.87,10.61,4.87h116.08c4.08,0,7.95-1.78,10.61-4.87,2.66-3.1,3.84-7.19,3.22-11.22h0ZM54.53,44.05c.72-2.55,2.75-3.39,4.82-2.86s3.25,2.68,2.66,4.78c-.83,2.93-6.23,7.85-6.23,7.85,0,0-2.08-6.83-1.25-9.77Zm-13.1,4.99c.83-2.93,6.23-7.85,6.23-7.85,0,0,2.08,6.83,1.25,9.77-.72,2.55-2.75,3.39-4.82,2.86s-3.25-2.68-2.66-4.78Zm-17.76,56.24c-5.52,0-10.01-4.49-10.01-10.01s4.49-10.01,10.01-10.01,10.01,4.49,10.01,10.01-4.49,10.01-10.01,10.01Zm2.83-34.83c0-5.52,4.49-10.01,10.01-10.01s10.01,4.49,10.01,10.01-4.49,10.01-10.01,10.01-10.01-4.49-10.01-10.01Zm22.84,34.83c-5.52,0-10.01-4.49-10.01-10.01s4.49-10.01,10.01-10.01,10.01,4.49,10.01,10.01-4.49,10.01-10.01,10.01Zm2.83-34.83c0-5.52,4.49-10.01,10.01-10.01s10.01,4.49,10.01,10.01-4.49,10.01-10.01,10.01-10.01-4.49-10.01-10.01Zm22.84,34.83c-5.52,0-10.01-4.49-10.01-10.01s4.49-10.01,10.01-10.01,10.01,4.49,10.01,10.01-4.49,10.01-10.01,10.01Zm2.83-34.83c0-5.52,4.49-10.01,10.01-10.01s10.01,4.49,10.01,10.01-4.49,10.01-10.01,10.01-10.01-4.49-10.01-10.01Zm22.84,34.83c-5.52,0-10.01-4.49-10.01-10.01s4.49-10.01,10.01-10.01,10.01,4.49,10.01,10.01-4.49,10.01-10.01,10.01Zm2.83-34.83c0-5.52,4.49-10.01,10.01-10.01s10.01,4.49,10.01,10.01-4.49,10.01-10.01,10.01-10.01-4.49-10.01-10.01Zm22.84,34.83c-5.52,0-10.01-4.49-10.01-10.01s4.49-10.01,10.01-10.01,10.01,4.49,10.01,10.01-4.49,10.01-10.01,10.01Z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
|
@ -0,0 +1,183 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg id="Musica_pop" data-name="Musica pop" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 840 550">
|
||||||
|
<defs>
|
||||||
|
<style>
|
||||||
|
.cls-1 {
|
||||||
|
opacity: .18;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-2 {
|
||||||
|
fill: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-3 {
|
||||||
|
fill: #ffcf1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-3, .cls-4, .cls-5, .cls-6, .cls-7, .cls-8, .cls-9, .cls-10, .cls-11, .cls-12, .cls-13, .cls-14, .cls-15 {
|
||||||
|
stroke-miterlimit: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-3, .cls-6, .cls-7, .cls-8, .cls-10, .cls-11, .cls-12, .cls-13 {
|
||||||
|
stroke-width: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-3, .cls-6, .cls-7, .cls-8, .cls-11, .cls-12, .cls-13 {
|
||||||
|
stroke: #4d4d4d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-4 {
|
||||||
|
stroke: #ff553f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-4, .cls-5, .cls-9, .cls-10, .cls-14, .cls-15 {
|
||||||
|
fill: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-4, .cls-5, .cls-9, .cls-14, .cls-15 {
|
||||||
|
stroke-width: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-5 {
|
||||||
|
stroke: #109400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-6 {
|
||||||
|
fill: #f40600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-8 {
|
||||||
|
fill: #0028b4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-16 {
|
||||||
|
fill: #bdbdbd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-9 {
|
||||||
|
stroke: #0052f4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-10 {
|
||||||
|
stroke: #8a8a8a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-11 {
|
||||||
|
fill: #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-12 {
|
||||||
|
fill: #00741a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-13 {
|
||||||
|
fill: #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-17 {
|
||||||
|
opacity: .32;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-18 {
|
||||||
|
font-family: Roboto-Black, Roboto;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 800;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-19 {
|
||||||
|
letter-spacing: -.02em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-14 {
|
||||||
|
stroke: #ffed9f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-20 {
|
||||||
|
letter-spacing: -.06em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-15 {
|
||||||
|
stroke: #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-21 {
|
||||||
|
letter-spacing: -.01em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-22 {
|
||||||
|
fill: #d1d1d1;
|
||||||
|
stroke: #000;
|
||||||
|
stroke-linecap: round;
|
||||||
|
stroke-linejoin: round;
|
||||||
|
stroke-width: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-23 {
|
||||||
|
fill: #7f001c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cls-24 {
|
||||||
|
letter-spacing: -.03em;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g id="By_Maxihplay" data-name="By Maxihplay">
|
||||||
|
<path id="fundo_controle" data-name="fundo controle" class="cls-22" d="m716.42,472.1H123.58c-51.9,0-82.14-46.22-68.5-99.51l61.63-233.75c8.82-34.45,46.61-60.95,84.85-60.95h436.88c38.25,0,76.03,26.49,84.85,60.95l61.63,233.75c13.64,53.29-16.6,99.51-68.5,99.51Z"/>
|
||||||
|
<g id="sombra_inferior" data-name="sombra inferior">
|
||||||
|
<path class="cls-16" d="m759.69,284.59l11.51,69.11c13.13,46-15.97,79.9-65.91,79.9H134.86c-49.94,0-79.03-33.89-65.91-79.9l11.78-68.63-23.56,85.8c-13.57,52.25,16.51,97.56,68.12,97.56h589.56c51.61,0,81.68-45.31,68.12-97.56l-23.28-86.27Z"/>
|
||||||
|
<line class="cls-10" x1="521.91" y1="434.01" x2="318.09" y2="434.01"/>
|
||||||
|
</g>
|
||||||
|
<g id="botoes_cores" data-name="botoes cores">
|
||||||
|
<g id="baixo">
|
||||||
|
<circle class="cls-12" cx="288.13" cy="362.05" r="53.35" transform="translate(-75.47 75.88) rotate(-13.28)"/>
|
||||||
|
<circle class="cls-6" cx="420" cy="362.05" r="53.35" transform="translate(-132.99 403.03) rotate(-45)"/>
|
||||||
|
<circle class="cls-12" cx="551.87" cy="362.05" r="53.35" transform="translate(-94.37 496.27) rotate(-45)"/>
|
||||||
|
<circle class="cls-11" cx="683.74" cy="362.05" r="53.35" transform="translate(-64.89 166.78) rotate(-13.28)"/>
|
||||||
|
<path class="cls-11" d="m156.26,308.7c-17.62,0-33.24,8.54-42.96,21.71-6.53,8.85-10.39,19.8-10.39,31.65,0,29.46,23.89,53.35,53.35,53.35s53.35-23.89,53.35-53.35-23.89-53.35-53.35-53.35Z"/>
|
||||||
|
</g>
|
||||||
|
<g id="cima">
|
||||||
|
<circle class="cls-8" cx="354.07" cy="235.36" r="53.35" transform="translate(-44.6 87.64) rotate(-13.28)"/>
|
||||||
|
<circle class="cls-8" cx="485.93" cy="235.36" r="53.35" transform="translate(-24.1 412.54) rotate(-45)"/>
|
||||||
|
<circle class="cls-3" cx="617.8" cy="235.36" r="53.35" transform="translate(14.53 505.79) rotate(-45)"/>
|
||||||
|
<circle class="cls-3" cx="222.2" cy="235.36" r="53.35" transform="translate(-48.13 57.35) rotate(-13.28)"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="brilho">
|
||||||
|
<g id="brilho_menor" data-name="brilho menor" class="cls-17">
|
||||||
|
<circle class="cls-15" cx="179.25" cy="370" r="8.58"/>
|
||||||
|
<circle class="cls-5" cx="311.37" cy="370" r="8.58" transform="translate(-76.68 81.44) rotate(-13.28)"/>
|
||||||
|
<circle class="cls-4" cx="443.48" cy="370" r="8.58" transform="translate(-73.14 111.79) rotate(-13.28)"/>
|
||||||
|
<circle class="cls-5" cx="575.6" cy="370" r="8.58" transform="translate(-93.04 515.38) rotate(-45)"/>
|
||||||
|
<circle class="cls-15" cx="707.71" cy="370.63" r="8.58"/>
|
||||||
|
<circle class="cls-14" cx="641.66" cy="251.6" r="8.58"/>
|
||||||
|
<circle class="cls-9" cx="509.54" cy="251.6" r="8.58" transform="translate(-44.18 123.8) rotate(-13.28)"/>
|
||||||
|
<circle class="cls-9" cx="377.42" cy="251.6" r="8.58" transform="translate(-67.36 340.57) rotate(-45)"/>
|
||||||
|
<circle class="cls-14" cx="245.31" cy="251.6" r="8.58"/>
|
||||||
|
</g>
|
||||||
|
<g id="brilho_maior" data-name="brilho maior" class="cls-1">
|
||||||
|
<circle class="cls-2" cx="182.25" cy="372" r="8.58"/>
|
||||||
|
<circle class="cls-2" cx="314.37" cy="372" r="8.58" transform="translate(-77.06 82.18) rotate(-13.28)"/>
|
||||||
|
<circle class="cls-2" cx="446.48" cy="372" r="8.58" transform="translate(-73.52 112.53) rotate(-13.28)"/>
|
||||||
|
<circle class="cls-2" cx="578.6" cy="372" r="8.58" transform="translate(-93.57 518.09) rotate(-45)"/>
|
||||||
|
<circle class="cls-2" cx="710.71" cy="372.63" r="8.58"/>
|
||||||
|
<circle class="cls-2" cx="644.66" cy="253.6" r="8.58"/>
|
||||||
|
<circle class="cls-2" cx="512.54" cy="253.6" r="8.58" transform="translate(-44.55 124.54) rotate(-13.28)"/>
|
||||||
|
<circle class="cls-2" cx="380.42" cy="253.6" r="8.58" transform="translate(-67.9 343.28) rotate(-45)"/>
|
||||||
|
<circle class="cls-2" cx="248.31" cy="253.6" r="8.58"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="botoes_gota" data-name="botoes gota">
|
||||||
|
<g id="sombra">
|
||||||
|
<path id="B" class="cls-7" d="m320.13,118.15c-6.48-1.76-12.86,1-15.12,9.45-2.61,9.71,3.91,32.34,3.91,32.34,0,0,16.95-16.26,19.56-25.97,1.86-6.94-1.86-14.06-8.35-15.82Z"/>
|
||||||
|
<path id="A" class="cls-7" d="m263.87,144.12c-1.86,6.94,1.86,14.06,8.35,15.82,6.48,1.76,12.86-1,15.12-9.45,2.61-9.71-3.91-32.34-3.91-32.34,0,0-16.95,16.26-19.56,25.97Z"/>
|
||||||
|
</g>
|
||||||
|
<g id="botao">
|
||||||
|
<path id="B-2" data-name="B" class="cls-13" d="m320.13,113.55c-6.48-1.76-12.86,1-15.12,9.45-2.61,9.71,3.91,32.34,3.91,32.34,0,0,16.95-16.26,19.56-25.97,1.86-6.94-1.86-14.06-8.35-15.82Z"/>
|
||||||
|
<path id="A-2" data-name="A" class="cls-13" d="m263.87,139.52c-1.86,6.94,1.86,14.06,8.35,15.82,6.48,1.76,12.86-1,15.12-9.45,2.61-9.71-3.91-32.34-3.91-32.34,0,0-16.95,16.26-19.56,25.97Z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<text class="cls-18" transform="translate(222.2 113.55)"><tspan x="0" y="0">SELE</tspan><tspan class="cls-21" x="27.45" y="0">C</tspan><tspan class="cls-24" x="35.15" y="0">T</tspan></text>
|
||||||
|
<text class="cls-18" transform="translate(335.17 159.94)"><tspan x="0" y="0">S</tspan><tspan class="cls-20" x="7.51" y="0">T</tspan><tspan x="14.37" y="0">A</tspan><tspan class="cls-19" x="22.55" y="0">R</tspan><tspan class="cls-24" x="30.08" y="0">T</tspan></text>
|
||||||
|
<path id="marca" class="cls-23" d="m619,112.15l-31.06,30.76c-5.12,5.07-12.87,8.02-21.07,8.02h-114.8v-38.78h166.93Z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 7.1 KiB |
|
@ -68,6 +68,7 @@
|
||||||
<file>icons/black/svg/pause-line.svg</file>
|
<file>icons/black/svg/pause-line.svg</file>
|
||||||
<file>icons/black/svg/play-line.svg</file>
|
<file>icons/black/svg/play-line.svg</file>
|
||||||
<file>icons/black/svg/plus-line.svg</file>
|
<file>icons/black/svg/plus-line.svg</file>
|
||||||
|
<file>icons/black/svg/Popn-line.svg</file>
|
||||||
<file>icons/black/svg/price-tag-3-line.svg</file>
|
<file>icons/black/svg/price-tag-3-line.svg</file>
|
||||||
<file>icons/black/svg/printer-line.svg</file>
|
<file>icons/black/svg/printer-line.svg</file>
|
||||||
<file>icons/black/svg/refresh-line.svg</file>
|
<file>icons/black/svg/refresh-line.svg</file>
|
||||||
|
@ -161,6 +162,7 @@
|
||||||
<file>icons/white/svg/pause-line.svg</file>
|
<file>icons/white/svg/pause-line.svg</file>
|
||||||
<file>icons/white/svg/play-line.svg</file>
|
<file>icons/white/svg/play-line.svg</file>
|
||||||
<file>icons/white/svg/plus-line.svg</file>
|
<file>icons/white/svg/plus-line.svg</file>
|
||||||
|
<file>icons/white/svg/Popn-line.svg</file>
|
||||||
<file>icons/white/svg/price-tag-3-line.svg</file>
|
<file>icons/white/svg/price-tag-3-line.svg</file>
|
||||||
<file>icons/white/svg/printer-line.svg</file>
|
<file>icons/white/svg/printer-line.svg</file>
|
||||||
<file>icons/white/svg/refresh-line.svg</file>
|
<file>icons/white/svg/refresh-line.svg</file>
|
||||||
|
@ -186,5 +188,6 @@
|
||||||
<file>images/DualShock_2.svg</file>
|
<file>images/DualShock_2.svg</file>
|
||||||
<file>images/GT_Force.svg</file>
|
<file>images/GT_Force.svg</file>
|
||||||
<file>images/Guitar.svg</file>
|
<file>images/Guitar.svg</file>
|
||||||
|
<file>images/Popn.svg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
@ -442,6 +442,7 @@ set(pcsx2PADSources
|
||||||
SIO/Pad/PadBase.cpp
|
SIO/Pad/PadBase.cpp
|
||||||
SIO/Pad/PadDualshock2.cpp
|
SIO/Pad/PadDualshock2.cpp
|
||||||
SIO/Pad/PadGuitar.cpp
|
SIO/Pad/PadGuitar.cpp
|
||||||
|
SIO/Pad/PadPopn.cpp
|
||||||
SIO/Pad/PadNotConnected.cpp
|
SIO/Pad/PadNotConnected.cpp
|
||||||
)
|
)
|
||||||
set(pcsx2PADHeaders
|
set(pcsx2PADHeaders
|
||||||
|
@ -449,6 +450,7 @@ set(pcsx2PADHeaders
|
||||||
SIO/Pad/PadBase.h
|
SIO/Pad/PadBase.h
|
||||||
SIO/Pad/PadDualshock2.h
|
SIO/Pad/PadDualshock2.h
|
||||||
SIO/Pad/PadGuitar.h
|
SIO/Pad/PadGuitar.h
|
||||||
|
SIO/Pad/PadPopn.h
|
||||||
SIO/Pad/PadNotConnected.h
|
SIO/Pad/PadNotConnected.h
|
||||||
SIO/Pad/PadTypes.h
|
SIO/Pad/PadTypes.h
|
||||||
)
|
)
|
||||||
|
|
|
@ -485,7 +485,7 @@ bool ImGuiManager::AddIconFonts(float size)
|
||||||
{
|
{
|
||||||
// clang-format off
|
// clang-format off
|
||||||
static constexpr ImWchar range_fa[] = { 0xf002,0xf002,0xf005,0xf005,0xf007,0xf007,0xf00c,0xf00e,0xf011,0xf011,0xf013,0xf013,0xf017,0xf017,0xf019,0xf019,0xf01c,0xf01c,0xf021,0xf021,0xf023,0xf023,0xf025,0xf025,0xf027,0xf028,0xf02e,0xf02e,0xf030,0xf030,0xf03a,0xf03a,0xf03d,0xf03d,0xf04a,0xf04c,0xf04e,0xf04e,0xf050,0xf050,0xf052,0xf052,0xf059,0xf059,0xf05e,0xf05e,0xf063,0xf063,0xf065,0xf065,0xf067,0xf067,0xf06a,0xf06a,0xf071,0xf071,0xf077,0xf078,0xf07b,0xf07c,0xf084,0xf085,0xf091,0xf091,0xf0ac,0xf0ad,0xf0b0,0xf0b0,0xf0c5,0xf0c5,0xf0c7,0xf0c9,0xf0cb,0xf0cb,0xf0d0,0xf0d0,0xf0dc,0xf0dc,0xf0e2,0xf0e2,0xf0eb,0xf0eb,0xf0f1,0xf0f1,0xf0f3,0xf0f3,0xf0fe,0xf0fe,0xf110,0xf110,0xf119,0xf119,0xf11b,0xf11c,0xf121,0xf121,0xf133,0xf133,0xf140,0xf140,0xf144,0xf144,0xf14a,0xf14a,0xf15b,0xf15b,0xf15d,0xf15d,0xf188,0xf188,0xf191,0xf192,0xf1c9,0xf1c9,0xf1dd,0xf1de,0xf1e6,0xf1e6,0xf1ea,0xf1eb,0xf1f8,0xf1f8,0xf1fc,0xf1fc,0xf242,0xf242,0xf245,0xf245,0xf26c,0xf26c,0xf279,0xf279,0xf2d0,0xf2d0,0xf2db,0xf2db,0xf2f2,0xf2f2,0xf2f5,0xf2f5,0xf302,0xf302,0xf3c1,0xf3c1,0xf3fd,0xf3fd,0xf410,0xf410,0xf466,0xf466,0xf500,0xf500,0xf517,0xf517,0xf51f,0xf51f,0xf543,0xf543,0xf545,0xf545,0xf547,0xf548,0xf552,0xf552,0xf56d,0xf56d,0xf5a2,0xf5a2,0xf5e7,0xf5e7,0xf65d,0xf65e,0xf6a9,0xf6a9,0xf756,0xf756,0xf7c2,0xf7c2,0xf807,0xf807,0xf815,0xf815,0xf818,0xf818,0xf84c,0xf84c,0xf8cc,0xf8cc,0xf8d9,0xf8d9,0x0,0x0 };
|
static constexpr ImWchar range_fa[] = { 0xf002,0xf002,0xf005,0xf005,0xf007,0xf007,0xf00c,0xf00e,0xf011,0xf011,0xf013,0xf013,0xf017,0xf017,0xf019,0xf019,0xf01c,0xf01c,0xf021,0xf021,0xf023,0xf023,0xf025,0xf025,0xf027,0xf028,0xf02e,0xf02e,0xf030,0xf030,0xf03a,0xf03a,0xf03d,0xf03d,0xf04a,0xf04c,0xf04e,0xf04e,0xf050,0xf050,0xf052,0xf052,0xf059,0xf059,0xf05e,0xf05e,0xf063,0xf063,0xf065,0xf065,0xf067,0xf067,0xf06a,0xf06a,0xf071,0xf071,0xf077,0xf078,0xf07b,0xf07c,0xf084,0xf085,0xf091,0xf091,0xf0ac,0xf0ad,0xf0b0,0xf0b0,0xf0c5,0xf0c5,0xf0c7,0xf0c9,0xf0cb,0xf0cb,0xf0d0,0xf0d0,0xf0dc,0xf0dc,0xf0e2,0xf0e2,0xf0eb,0xf0eb,0xf0f1,0xf0f1,0xf0f3,0xf0f3,0xf0fe,0xf0fe,0xf110,0xf110,0xf119,0xf119,0xf11b,0xf11c,0xf121,0xf121,0xf133,0xf133,0xf140,0xf140,0xf144,0xf144,0xf14a,0xf14a,0xf15b,0xf15b,0xf15d,0xf15d,0xf188,0xf188,0xf191,0xf192,0xf1c9,0xf1c9,0xf1dd,0xf1de,0xf1e6,0xf1e6,0xf1ea,0xf1eb,0xf1f8,0xf1f8,0xf1fc,0xf1fc,0xf242,0xf242,0xf245,0xf245,0xf26c,0xf26c,0xf279,0xf279,0xf2d0,0xf2d0,0xf2db,0xf2db,0xf2f2,0xf2f2,0xf2f5,0xf2f5,0xf302,0xf302,0xf3c1,0xf3c1,0xf3fd,0xf3fd,0xf410,0xf410,0xf466,0xf466,0xf500,0xf500,0xf517,0xf517,0xf51f,0xf51f,0xf543,0xf543,0xf545,0xf545,0xf547,0xf548,0xf552,0xf552,0xf56d,0xf56d,0xf5a2,0xf5a2,0xf5e7,0xf5e7,0xf65d,0xf65e,0xf6a9,0xf6a9,0xf756,0xf756,0xf7c2,0xf7c2,0xf807,0xf807,0xf815,0xf815,0xf818,0xf818,0xf84c,0xf84c,0xf8cc,0xf8cc,0xf8d9,0xf8d9,0x0,0x0 };
|
||||||
static constexpr ImWchar range_pf[] = { 0x2198,0x2199,0x219e,0x21a1,0x21b0,0x21b3,0x21ba,0x21c3,0x21d0,0x21d4,0x21dc,0x21dd,0x21e0,0x21e3,0x21f3,0x21f3,0x21f7,0x21f8,0x21fa,0x21fb,0x227a,0x227d,0x23b2,0x23b4,0x23f4,0x23f7,0x2427,0x243a,0x243c,0x243c,0x2443,0x2443,0x2460,0x246b,0x24f5,0x24fd,0x24ff,0x24ff,0x278a,0x278e,0xe001,0xe001,0xff21,0xff3a,0x0,0x0 };
|
static constexpr ImWchar range_pf[] = { 0x2198,0x2199,0x219e,0x21a1,0x21b0,0x21b3,0x21ba,0x21c3,0x21d0,0x21d4,0x21dc,0x21dd,0x21e0,0x21e3,0x21f3,0x21f3,0x21f7,0x21f8,0x21fa,0x21fb,0x227a,0x227d,0x22c0,0x22c8,0x23b2,0x23b4,0x23f4,0x23f7,0x2427,0x243a,0x243c,0x243c,0x2443,0x2443,0x2460,0x246b,0x24f5,0x24fd,0x24ff,0x24ff,0x278a,0x278e,0xe001,0xe001,0xff21,0xff3a,0x0,0x0 };
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "SIO/Pad/Pad.h"
|
#include "SIO/Pad/Pad.h"
|
||||||
#include "SIO/Pad/PadDualshock2.h"
|
#include "SIO/Pad/PadDualshock2.h"
|
||||||
#include "SIO/Pad/PadGuitar.h"
|
#include "SIO/Pad/PadGuitar.h"
|
||||||
|
#include "SIO/Pad/PadPopn.h"
|
||||||
#include "SIO/Pad/PadNotConnected.h"
|
#include "SIO/Pad/PadNotConnected.h"
|
||||||
#include "SIO/Sio.h"
|
#include "SIO/Sio.h"
|
||||||
|
|
||||||
|
@ -243,6 +244,7 @@ static const Pad::ControllerInfo* s_controller_info[] = {
|
||||||
&PadNotConnected::ControllerInfo,
|
&PadNotConnected::ControllerInfo,
|
||||||
&PadDualshock2::ControllerInfo,
|
&PadDualshock2::ControllerInfo,
|
||||||
&PadGuitar::ControllerInfo,
|
&PadGuitar::ControllerInfo,
|
||||||
|
&PadPopn::ControllerInfo,
|
||||||
};
|
};
|
||||||
|
|
||||||
const Pad::ControllerInfo* Pad::GetControllerInfo(Pad::ControllerType type)
|
const Pad::ControllerInfo* Pad::GetControllerInfo(Pad::ControllerType type)
|
||||||
|
@ -480,6 +482,9 @@ PadBase* Pad::CreatePad(u8 unifiedSlot, ControllerType controllerType, size_t ej
|
||||||
case ControllerType::Guitar:
|
case ControllerType::Guitar:
|
||||||
s_controllers[unifiedSlot] = std::make_unique<PadGuitar>(unifiedSlot, ejectTicks);
|
s_controllers[unifiedSlot] = std::make_unique<PadGuitar>(unifiedSlot, ejectTicks);
|
||||||
break;
|
break;
|
||||||
|
case ControllerType::Popn:
|
||||||
|
s_controllers[unifiedSlot] = std::make_unique<PadPopn>(unifiedSlot, ejectTicks);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
s_controllers[unifiedSlot] = std::make_unique<PadNotConnected>(unifiedSlot, ejectTicks);
|
s_controllers[unifiedSlot] = std::make_unique<PadNotConnected>(unifiedSlot, ejectTicks);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -0,0 +1,556 @@
|
||||||
|
// SPDX-FileCopyrightText: 2002-2023 PCSX2 Dev Team
|
||||||
|
// SPDX-License-Identifier: LGPL-3.0+
|
||||||
|
|
||||||
|
#include "SIO/Pad/PadPopn.h"
|
||||||
|
#include "SIO/Pad/Pad.h"
|
||||||
|
#include "SIO/Sio.h"
|
||||||
|
#include "SIO/Sio0.h"
|
||||||
|
|
||||||
|
#include "Common.h"
|
||||||
|
#include "Input/InputManager.h"
|
||||||
|
#include "Host.h"
|
||||||
|
|
||||||
|
#include "IconsPromptFont.h"
|
||||||
|
|
||||||
|
static const InputBindingInfo s_bindings[] = {
|
||||||
|
// clang-format off
|
||||||
|
{"YellowL", TRANSLATE_NOOP("Pad", "Yellow (Left)"), ICON_PF_POPN_YELLOW_LEFT, InputBindingInfo::Type::Button, PadPopn::Inputs::PAD_YELLOW_LEFT, GenericInputBinding::Circle},
|
||||||
|
{"YellowR", TRANSLATE_NOOP("Pad", "Yellow (Right)"), ICON_PF_POPN_YELLOW_RIGHT, InputBindingInfo::Type::Button, PadPopn::Inputs::PAD_YELLOW_RIGHT, GenericInputBinding::DPadUp},
|
||||||
|
{"BlueL", TRANSLATE_NOOP("Pad", "Blue (Left)"), ICON_PF_POPN_BLUE_LEFT, InputBindingInfo::Type::Button, PadPopn::Inputs::PAD_BLUE_LEFT, GenericInputBinding::Cross},
|
||||||
|
{"BlueR", TRANSLATE_NOOP("Pad", "Blue (Right)"), ICON_PF_POPN_BLUE_RIGHT, InputBindingInfo::Type::Button, PadPopn::Inputs::PAD_BLUE_RIGHT, GenericInputBinding::Square},
|
||||||
|
{"WhiteL", TRANSLATE_NOOP("Pad", "White (Left)"), ICON_PF_POPN_WHITE_LEFT, InputBindingInfo::Type::Button, PadPopn::Inputs::PAD_WHITE_LEFT, GenericInputBinding::Triangle},
|
||||||
|
{"WhiteR", TRANSLATE_NOOP("Pad", "White (Right)"), ICON_PF_POPN_WHITE_RIGHT, InputBindingInfo::Type::Button, PadPopn::Inputs::PAD_WHITE_RIGHT, GenericInputBinding::L2},
|
||||||
|
{"GreenL", TRANSLATE_NOOP("Pad", "Green (Left)"), ICON_PF_POPN_GREEN_LEFT, InputBindingInfo::Type::Button, PadPopn::Inputs::PAD_GREEN_LEFT, GenericInputBinding::R1},
|
||||||
|
{"GreenR", TRANSLATE_NOOP("Pad", "Green (Right)"), ICON_PF_POPN_GREEN_RIGHT, InputBindingInfo::Type::Button, PadPopn::Inputs::PAD_GREEN_RIGHT, GenericInputBinding::R2},
|
||||||
|
{"Red", TRANSLATE_NOOP("Pad", "Red"), ICON_PF_POPN_RED, InputBindingInfo::Type::Button, PadPopn::Inputs::PAD_RED, GenericInputBinding::L1},
|
||||||
|
{"Start", TRANSLATE_NOOP("Pad", "Start"), ICON_PF_START, InputBindingInfo::Type::Button, PadPopn::Inputs::PAD_START, GenericInputBinding::Start},
|
||||||
|
{"Select", TRANSLATE_NOOP("Pad", "Select"), ICON_PF_SELECT_SHARE, InputBindingInfo::Type::Button, PadPopn::Inputs::PAD_SELECT, GenericInputBinding::Select},
|
||||||
|
// clang-format on
|
||||||
|
};
|
||||||
|
|
||||||
|
const Pad::ControllerInfo PadPopn::ControllerInfo = {Pad::ControllerType::Popn, "Popn",
|
||||||
|
TRANSLATE_NOOP("Pad", "Pop'n Music"), ICON_PF_GAMEPAD, s_bindings, {}, Pad::VibrationCapabilities::NoVibration};
|
||||||
|
|
||||||
|
void PadPopn::ConfigLog()
|
||||||
|
{
|
||||||
|
const auto [port, slot] = sioConvertPadToPortAndSlot(unifiedSlot);
|
||||||
|
|
||||||
|
std::string_view pressureStr;
|
||||||
|
|
||||||
|
switch (this->responseBytes)
|
||||||
|
{
|
||||||
|
case static_cast<u32>(Pad::ResponseBytes::DUALSHOCK2):
|
||||||
|
pressureStr = "D+A+P";
|
||||||
|
break;
|
||||||
|
case static_cast<u32>(Pad::ResponseBytes::ANALOG):
|
||||||
|
pressureStr = "D+A";
|
||||||
|
break;
|
||||||
|
case static_cast<u32>(Pad::ResponseBytes::DIGITAL):
|
||||||
|
pressureStr = "D";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pressureStr = "U";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// AL: Analog Light (is it turned on right now)
|
||||||
|
// AB: Analog Button (is it useable or is it locked in its current state)
|
||||||
|
// RB: Response Bytes (what data is included in the controller's responses - D = Digital, A = Analog, P = Pressure)
|
||||||
|
Console.WriteLn(fmt::format("[Pad] Pop'n Config Finished - P{0}/S{1} - AL: {2} - AB: {3} - RB: {4} (0x{5:08X})",
|
||||||
|
port + 1,
|
||||||
|
slot + 1,
|
||||||
|
(this->analogLight ? "On" : "Off"),
|
||||||
|
(this->analogLocked ? "Locked" : "Usable"),
|
||||||
|
pressureStr,
|
||||||
|
this->responseBytes));
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 PadPopn::Mystery(u8 commandByte)
|
||||||
|
{
|
||||||
|
switch (commandBytesReceived)
|
||||||
|
{
|
||||||
|
case 5:
|
||||||
|
return 0x02;
|
||||||
|
case 8:
|
||||||
|
return 0x5a;
|
||||||
|
default:
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 PadPopn::ButtonQuery(u8 commandByte)
|
||||||
|
{
|
||||||
|
switch (this->currentMode)
|
||||||
|
{
|
||||||
|
case Pad::Mode::DUALSHOCK2:
|
||||||
|
case Pad::Mode::ANALOG:
|
||||||
|
switch (commandBytesReceived)
|
||||||
|
{
|
||||||
|
case 3:
|
||||||
|
case 4:
|
||||||
|
return 0xff;
|
||||||
|
case 5:
|
||||||
|
return 0x03;
|
||||||
|
case 8:
|
||||||
|
g_Sio0.SetAcknowledge(false);
|
||||||
|
return 0x5a;
|
||||||
|
default:
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
switch (commandBytesReceived)
|
||||||
|
{
|
||||||
|
case 8:
|
||||||
|
g_Sio0.SetAcknowledge(false);
|
||||||
|
return 0x00;
|
||||||
|
default:
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 PadPopn::Poll(u8 commandByte)
|
||||||
|
{
|
||||||
|
const u32 buttons = GetButtons();
|
||||||
|
u8 largeMotor = 0x00;
|
||||||
|
u8 smallMotor = 0x00;
|
||||||
|
|
||||||
|
switch (commandBytesReceived)
|
||||||
|
{
|
||||||
|
case 3:
|
||||||
|
return (buttons >> 8) & 0xff;
|
||||||
|
case 4:
|
||||||
|
// PS1 mode: If the controller is still in digital mode, it is time to stop acknowledging.
|
||||||
|
if (this->currentMode == Pad::Mode::DIGITAL)
|
||||||
|
{
|
||||||
|
g_Sio0.SetAcknowledge(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return buttons & 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.Warning("%s(%02X) Did not reach a valid return path! Returning zero as a failsafe!", __FUNCTION__, commandByte);
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 PadPopn::Config(u8 commandByte)
|
||||||
|
{
|
||||||
|
if (commandBytesReceived == 3)
|
||||||
|
{
|
||||||
|
if (commandByte)
|
||||||
|
{
|
||||||
|
if (!this->isInConfig)
|
||||||
|
{
|
||||||
|
this->isInConfig = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.Warning("%s(%02X) Unexpected enter while already in config mode", __FUNCTION__, commandByte);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (this->isInConfig)
|
||||||
|
{
|
||||||
|
this->isInConfig = false;
|
||||||
|
this->ConfigLog();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.Warning("%s(%02X) Unexpected exit while not in config mode", __FUNCTION__, commandByte);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PS1 mode: Config mode would have been triggered by a prior byte in this command sequence;
|
||||||
|
// if we are now in config mode, check the current mode and if this is the last byte. If so,
|
||||||
|
// don't acknowledge.
|
||||||
|
if (this->isInConfig)
|
||||||
|
{
|
||||||
|
if ((this->currentMode == Pad::Mode::DIGITAL && this->commandBytesReceived == 4) || (this->currentMode == Pad::Mode::ANALOG && this->commandBytesReceived == 8))
|
||||||
|
{
|
||||||
|
g_Sio0.SetAcknowledge(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Changes the mode of the controller between digital and analog, and adjusts the analog LED accordingly.
|
||||||
|
u8 PadPopn::ModeSwitch(u8 commandByte)
|
||||||
|
{
|
||||||
|
switch (commandBytesReceived)
|
||||||
|
{
|
||||||
|
case 3:
|
||||||
|
this->analogLight = commandByte;
|
||||||
|
|
||||||
|
if (this->analogLight)
|
||||||
|
{
|
||||||
|
this->currentMode = Pad::Mode::ANALOG;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->currentMode = Pad::Mode::DIGITAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
this->analogLocked = (commandByte == 0x03);
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
g_Sio0.SetAcknowledge(false);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 PadPopn::StatusInfo(u8 commandByte)
|
||||||
|
{
|
||||||
|
switch (commandBytesReceived)
|
||||||
|
{
|
||||||
|
case 3:
|
||||||
|
return static_cast<u8>(Pad::PhysicalType::STANDARD);
|
||||||
|
case 4:
|
||||||
|
return 0x02;
|
||||||
|
case 5:
|
||||||
|
return this->analogLight;
|
||||||
|
case 6:
|
||||||
|
return 0x02;
|
||||||
|
case 7:
|
||||||
|
return 0x01;
|
||||||
|
case 8:
|
||||||
|
g_Sio0.SetAcknowledge(false);
|
||||||
|
return 0x00;
|
||||||
|
default:
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 PadPopn::Constant1(u8 commandByte)
|
||||||
|
{
|
||||||
|
switch (commandBytesReceived)
|
||||||
|
{
|
||||||
|
case 3:
|
||||||
|
commandStage = commandByte != 0;
|
||||||
|
return 0x00;
|
||||||
|
case 5:
|
||||||
|
return 0x01;
|
||||||
|
case 6:
|
||||||
|
if (commandStage)
|
||||||
|
{
|
||||||
|
return 0x01;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0x02;
|
||||||
|
}
|
||||||
|
case 7:
|
||||||
|
if (commandStage)
|
||||||
|
{
|
||||||
|
return 0x01;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
case 8:
|
||||||
|
g_Sio0.SetAcknowledge(false);
|
||||||
|
return (commandStage ? 0x14 : 0x0a);
|
||||||
|
default:
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 PadPopn::Constant2(u8 commandByte)
|
||||||
|
{
|
||||||
|
switch (commandBytesReceived)
|
||||||
|
{
|
||||||
|
case 5:
|
||||||
|
return 0x02;
|
||||||
|
case 7:
|
||||||
|
return 0x01;
|
||||||
|
case 8:
|
||||||
|
g_Sio0.SetAcknowledge(false);
|
||||||
|
return 0x00;
|
||||||
|
default:
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 PadPopn::Constant3(u8 commandByte)
|
||||||
|
{
|
||||||
|
switch (commandBytesReceived)
|
||||||
|
{
|
||||||
|
case 3:
|
||||||
|
commandStage = (commandByte != 0);
|
||||||
|
return 0x00;
|
||||||
|
case 6:
|
||||||
|
if (commandStage)
|
||||||
|
{
|
||||||
|
return 0x07;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0x04;
|
||||||
|
}
|
||||||
|
case 8:
|
||||||
|
g_Sio0.SetAcknowledge(false);
|
||||||
|
return 0x00;
|
||||||
|
default:
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set which byte of the poll command will correspond to a motor's power level.
|
||||||
|
// In all known cases, games never rearrange the motors. We've hard coded pad polls
|
||||||
|
// to always use the first vibration byte as small motor, and the second as big motor.
|
||||||
|
// There is no reason to rearrange these. Games never rearrange these. If someone does
|
||||||
|
// try to rearrange these, they should suffer.
|
||||||
|
//
|
||||||
|
// The return values for cases 3 and 4 are just to notify the pad module of what the mapping was, prior to this command.
|
||||||
|
u8 PadPopn::VibrationMap(u8 commandByte)
|
||||||
|
{
|
||||||
|
return 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 PadPopn::ResponseBytes(u8 commandByte)
|
||||||
|
{
|
||||||
|
switch (commandBytesReceived)
|
||||||
|
{
|
||||||
|
case 3:
|
||||||
|
this->responseBytes = commandByte;
|
||||||
|
return 0x00;
|
||||||
|
case 4:
|
||||||
|
this->responseBytes |= (commandByte << 8);
|
||||||
|
return 0x00;
|
||||||
|
case 5:
|
||||||
|
this->responseBytes |= (commandByte << 16);
|
||||||
|
|
||||||
|
switch (static_cast<Pad::ResponseBytes>(this->responseBytes))
|
||||||
|
{
|
||||||
|
case Pad::ResponseBytes::ANALOG:
|
||||||
|
this->analogLight = true;
|
||||||
|
this->currentMode = Pad::Mode::ANALOG;
|
||||||
|
break;
|
||||||
|
case Pad::ResponseBytes::DUALSHOCK2:
|
||||||
|
this->analogLight = true;
|
||||||
|
this->currentMode = Pad::Mode::DUALSHOCK2;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
this->analogLight = false;
|
||||||
|
this->currentMode = Pad::Mode::DIGITAL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0x00;
|
||||||
|
case 8:
|
||||||
|
return 0x5a;
|
||||||
|
default:
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PadPopn::PadPopn(u8 unifiedSlot, size_t ejectTicks)
|
||||||
|
: PadBase(unifiedSlot, ejectTicks)
|
||||||
|
{
|
||||||
|
currentMode = Pad::Mode::DIGITAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
PadPopn::~PadPopn() = default;
|
||||||
|
|
||||||
|
Pad::ControllerType PadPopn::GetType() const
|
||||||
|
{
|
||||||
|
return Pad::ControllerType::Popn;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Pad::ControllerInfo& PadPopn::GetInfo() const
|
||||||
|
{
|
||||||
|
return ControllerInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PadPopn::Set(u32 index, float value)
|
||||||
|
{
|
||||||
|
if (index > Inputs::LENGTH)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Since we reordered the buttons for better UI, we need to remap them here.
|
||||||
|
static constexpr std::array<u8, Inputs::LENGTH> bitmaskMapping = {{
|
||||||
|
5, // PAD_YELLOW_LEFT
|
||||||
|
12, // PAD_YELLOW_RIGHT
|
||||||
|
6, // PAD_BLUE_LEFT
|
||||||
|
7, // PAD_BLUE_RIGHT
|
||||||
|
4, // PAD_WHITE_LEFT
|
||||||
|
0, // PAD_WHITE_RIGHT
|
||||||
|
3, // PAD_GREEN_LEFT
|
||||||
|
1, // PAD_GREEN_RIGHT
|
||||||
|
2, // PAD_RED
|
||||||
|
11, // PAD_START
|
||||||
|
8, // PAD_SELECT
|
||||||
|
}};
|
||||||
|
|
||||||
|
this->rawInputs[index] = static_cast<u8>(std::clamp(value * 255.0f, 0.0f, 255.0f));
|
||||||
|
|
||||||
|
if (value)
|
||||||
|
{
|
||||||
|
this->buttons &= ~(1u << bitmaskMapping[index]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->buttons |= (1u << bitmaskMapping[index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PadPopn::SetRawAnalogs(const std::tuple<u8, u8> left, const std::tuple<u8, u8> right)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void PadPopn::SetAxisScale(float deadzone, float scale)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
float PadPopn::GetVibrationScale(u32 motor) const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PadPopn::SetVibrationScale(u32 motor, float scale)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
float PadPopn::GetPressureModifier() const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PadPopn::SetPressureModifier(float mod)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void PadPopn::SetButtonDeadzone(float deadzone)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void PadPopn::SetAnalogInvertL(bool x, bool y)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void PadPopn::SetAnalogInvertR(bool x, bool y)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 PadPopn::GetRawInput(u32 index) const
|
||||||
|
{
|
||||||
|
return rawInputs[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
std::tuple<u8, u8> PadPopn::GetRawLeftAnalog() const
|
||||||
|
{
|
||||||
|
return std::tuple<u8, u8>{0x7f, 0x7f};
|
||||||
|
}
|
||||||
|
|
||||||
|
std::tuple<u8, u8> PadPopn::GetRawRightAnalog() const
|
||||||
|
{
|
||||||
|
return std::tuple<u8, u8>{0x7f, 0x7f};
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 PadPopn::GetButtons() const
|
||||||
|
{
|
||||||
|
// A quirk of the Pop'n controller, the "D-Pad" left right and down buttons are always pressed.
|
||||||
|
// Likely this was a simple way to identify their controllers by always reporting this button combination,
|
||||||
|
// since it was both impossible for a normal pad to do and quite impractical to imitate without
|
||||||
|
// some level of hardware tampering. This also meant they could just have the pad identify as a seemingly
|
||||||
|
// normal PS1 digital pad to work with the standard pad libraries across the board.
|
||||||
|
return buttons & ~(0xE000);
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 PadPopn::GetPressure(u32 index) const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PadPopn::Freeze(StateWrapper& sw)
|
||||||
|
{
|
||||||
|
if (!PadBase::Freeze(sw) || !sw.DoMarker("PadPopn"))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Private PadPopn members
|
||||||
|
sw.Do(&analogLight);
|
||||||
|
sw.Do(&analogLocked);
|
||||||
|
sw.Do(&analogPressed);
|
||||||
|
sw.Do(&commandStage);
|
||||||
|
sw.Do(&responseBytes);
|
||||||
|
return !sw.HasError();
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 PadPopn::SendCommandByte(u8 commandByte)
|
||||||
|
{
|
||||||
|
u8 ret = 0;
|
||||||
|
|
||||||
|
switch (this->commandBytesReceived)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
ret = 0x00;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
this->currentCommand = static_cast<Pad::Command>(commandByte);
|
||||||
|
|
||||||
|
if (this->currentCommand != Pad::Command::POLL && this->currentCommand != Pad::Command::CONFIG && !this->isInConfig)
|
||||||
|
{
|
||||||
|
Console.Warning("%s(%02X) Config-only command was sent to a pad outside of config mode!", __FUNCTION__, commandByte);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = this->isInConfig ? static_cast<u8>(Pad::Mode::CONFIG) : static_cast<u8>(this->currentMode);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ret = 0x5a;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
switch (this->currentCommand)
|
||||||
|
{
|
||||||
|
case Pad::Command::MYSTERY:
|
||||||
|
ret = Mystery(commandByte);
|
||||||
|
break;
|
||||||
|
case Pad::Command::BUTTON_QUERY:
|
||||||
|
ret = ButtonQuery(commandByte);
|
||||||
|
break;
|
||||||
|
case Pad::Command::POLL:
|
||||||
|
ret = Poll(commandByte);
|
||||||
|
break;
|
||||||
|
case Pad::Command::CONFIG:
|
||||||
|
ret = Config(commandByte);
|
||||||
|
break;
|
||||||
|
case Pad::Command::MODE_SWITCH:
|
||||||
|
ret = ModeSwitch(commandByte);
|
||||||
|
break;
|
||||||
|
case Pad::Command::STATUS_INFO:
|
||||||
|
ret = StatusInfo(commandByte);
|
||||||
|
break;
|
||||||
|
case Pad::Command::CONST_1:
|
||||||
|
ret = Constant1(commandByte);
|
||||||
|
break;
|
||||||
|
case Pad::Command::CONST_2:
|
||||||
|
ret = Constant2(commandByte);
|
||||||
|
break;
|
||||||
|
case Pad::Command::CONST_3:
|
||||||
|
ret = Constant3(commandByte);
|
||||||
|
break;
|
||||||
|
case Pad::Command::VIBRATION_MAP:
|
||||||
|
ret = VibrationMap(commandByte);
|
||||||
|
break;
|
||||||
|
case Pad::Command::RESPONSE_BYTES:
|
||||||
|
ret = ResponseBytes(commandByte);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ret = 0x00;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this->commandBytesReceived++;
|
||||||
|
return ret;
|
||||||
|
}
|
|
@ -0,0 +1,103 @@
|
||||||
|
// SPDX-FileCopyrightText: 2002-2023 PCSX2 Dev Team
|
||||||
|
// SPDX-License-Identifier: LGPL-3.0+
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "SIO/Pad/PadBase.h"
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
// FIXME: For the brave soul. No one on earth seems to have a (functioning) real Pop'N controller.
|
||||||
|
// Those who do don't seem to have a PS2 setup which they can run the pad ID homebrew on.
|
||||||
|
// We are going with old information yanked out of Lilypad for this one, which basically means we
|
||||||
|
// imitate a DS2, and then three buttons are always pressed down.
|
||||||
|
//
|
||||||
|
// If any brave challengers wish to make this cleaner or more slim, track one of these things down
|
||||||
|
// and figure out exactly what the inputs are and how they correlate.
|
||||||
|
class PadPopn final : public PadBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum Inputs
|
||||||
|
{
|
||||||
|
PAD_YELLOW_LEFT,
|
||||||
|
PAD_YELLOW_RIGHT,
|
||||||
|
PAD_BLUE_LEFT,
|
||||||
|
PAD_BLUE_RIGHT,
|
||||||
|
PAD_WHITE_LEFT,
|
||||||
|
PAD_WHITE_RIGHT,
|
||||||
|
PAD_GREEN_LEFT,
|
||||||
|
PAD_GREEN_RIGHT,
|
||||||
|
PAD_RED,
|
||||||
|
PAD_START,
|
||||||
|
PAD_SELECT,
|
||||||
|
LENGTH,
|
||||||
|
};
|
||||||
|
|
||||||
|
static constexpr u8 VIBRATION_MOTORS = 2;
|
||||||
|
|
||||||
|
private:
|
||||||
|
struct Analogs
|
||||||
|
{
|
||||||
|
u8 lx = Pad::ANALOG_NEUTRAL_POSITION;
|
||||||
|
u8 ly = Pad::ANALOG_NEUTRAL_POSITION;
|
||||||
|
u8 rx = Pad::ANALOG_NEUTRAL_POSITION;
|
||||||
|
u8 ry = Pad::ANALOG_NEUTRAL_POSITION;
|
||||||
|
bool lxInvert = false;
|
||||||
|
bool lyInvert = false;
|
||||||
|
bool rxInvert = false;
|
||||||
|
bool ryInvert = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
u32 buttons = 0xffffffffu;
|
||||||
|
Analogs analogs;
|
||||||
|
bool analogLight = false;
|
||||||
|
bool analogLocked = false;
|
||||||
|
// Analog button can be held without changing its state.
|
||||||
|
// We track here if it is currently held down, to avoid flipping in
|
||||||
|
// and out of analog mode every frame.
|
||||||
|
bool analogPressed = false;
|
||||||
|
bool commandStage = false;
|
||||||
|
u32 responseBytes = 0;
|
||||||
|
|
||||||
|
void ConfigLog();
|
||||||
|
|
||||||
|
u8 Mystery(u8 commandByte);
|
||||||
|
u8 ButtonQuery(u8 commandByte);
|
||||||
|
u8 Poll(u8 commandByte);
|
||||||
|
u8 Config(u8 commandByte);
|
||||||
|
u8 ModeSwitch(u8 commandByte);
|
||||||
|
u8 StatusInfo(u8 commandByte);
|
||||||
|
u8 Constant1(u8 commandByte);
|
||||||
|
u8 Constant2(u8 commandByte);
|
||||||
|
u8 Constant3(u8 commandByte);
|
||||||
|
u8 VibrationMap(u8 commandByte);
|
||||||
|
u8 ResponseBytes(u8 commandByte);
|
||||||
|
|
||||||
|
public:
|
||||||
|
PadPopn(u8 unifiedSlot, size_t ejectTicks);
|
||||||
|
~PadPopn() override;
|
||||||
|
|
||||||
|
Pad::ControllerType GetType() const override;
|
||||||
|
const Pad::ControllerInfo& GetInfo() const override;
|
||||||
|
void Set(u32 index, float value) override;
|
||||||
|
void SetRawAnalogs(const std::tuple<u8, u8> left, const std::tuple<u8, u8> right) override;
|
||||||
|
void SetAxisScale(float deadzone, float scale) override;
|
||||||
|
float GetVibrationScale(u32 motor) const override;
|
||||||
|
void SetVibrationScale(u32 motor, float scale) override;
|
||||||
|
float GetPressureModifier() const override;
|
||||||
|
void SetPressureModifier(float mod) override;
|
||||||
|
void SetButtonDeadzone(float deadzone) override;
|
||||||
|
void SetAnalogInvertL(bool x, bool y) override;
|
||||||
|
void SetAnalogInvertR(bool x, bool y) override;
|
||||||
|
u8 GetRawInput(u32 index) const override;
|
||||||
|
std::tuple<u8, u8> GetRawLeftAnalog() const override;
|
||||||
|
std::tuple<u8, u8> GetRawRightAnalog() const override;
|
||||||
|
u32 GetButtons() const override;
|
||||||
|
u8 GetPressure(u32 index) const override;
|
||||||
|
|
||||||
|
bool Freeze(StateWrapper& sw) override;
|
||||||
|
|
||||||
|
u8 SendCommandByte(u8 commandByte) override;
|
||||||
|
|
||||||
|
static const Pad::ControllerInfo ControllerInfo;
|
||||||
|
};
|
|
@ -64,6 +64,7 @@ namespace Pad
|
||||||
NotConnected,
|
NotConnected,
|
||||||
DualShock2,
|
DualShock2,
|
||||||
Guitar,
|
Guitar,
|
||||||
|
Popn,
|
||||||
Count
|
Count
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -248,6 +248,7 @@
|
||||||
<ClCompile Include="SIO\Pad\PadDualshock2.cpp" />
|
<ClCompile Include="SIO\Pad\PadDualshock2.cpp" />
|
||||||
<ClCompile Include="SIO\Pad\PadGuitar.cpp" />
|
<ClCompile Include="SIO\Pad\PadGuitar.cpp" />
|
||||||
<ClCompile Include="SIO\Pad\PadNotConnected.cpp" />
|
<ClCompile Include="SIO\Pad\PadNotConnected.cpp" />
|
||||||
|
<ClCompile Include="SIO\Pad\PadPopn.cpp" />
|
||||||
<ClCompile Include="SIO\Sio.cpp" />
|
<ClCompile Include="SIO\Sio.cpp" />
|
||||||
<ClCompile Include="SIO\Sio0.cpp" />
|
<ClCompile Include="SIO\Sio0.cpp" />
|
||||||
<ClCompile Include="SIO\Sio2.cpp" />
|
<ClCompile Include="SIO\Sio2.cpp" />
|
||||||
|
@ -596,6 +597,7 @@
|
||||||
<ClInclude Include="SIO\Pad\PadDualshock2.h" />
|
<ClInclude Include="SIO\Pad\PadDualshock2.h" />
|
||||||
<ClInclude Include="SIO\Pad\PadGuitar.h" />
|
<ClInclude Include="SIO\Pad\PadGuitar.h" />
|
||||||
<ClInclude Include="SIO\Pad\PadNotConnected.h" />
|
<ClInclude Include="SIO\Pad\PadNotConnected.h" />
|
||||||
|
<ClInclude Include="SIO\Pad\PadPopn.h" />
|
||||||
<ClInclude Include="SIO\Pad\PadTypes.h" />
|
<ClInclude Include="SIO\Pad\PadTypes.h" />
|
||||||
<ClInclude Include="SIO\Sio.h" />
|
<ClInclude Include="SIO\Sio.h" />
|
||||||
<ClInclude Include="SIO\Sio0.h" />
|
<ClInclude Include="SIO\Sio0.h" />
|
||||||
|
|
|
@ -1407,6 +1407,9 @@
|
||||||
<Filter>System\Ps2\Iop\SIO\PAD</Filter>
|
<Filter>System\Ps2\Iop\SIO\PAD</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="SPU2\ReverbResample.cpp" />
|
<ClCompile Include="SPU2\ReverbResample.cpp" />
|
||||||
|
<ClCompile Include="SIO\Pad\PadPopn.cpp">
|
||||||
|
<Filter>System\Ps2\Iop\SIO\PAD</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Patch.h">
|
<ClInclude Include="Patch.h">
|
||||||
|
@ -2323,6 +2326,9 @@
|
||||||
<Filter>System\Ps2\Iop\SIO\PAD</Filter>
|
<Filter>System\Ps2\Iop\SIO\PAD</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="ImGui\ImGuiAnimated.h" />
|
<ClInclude Include="ImGui\ImGuiAnimated.h" />
|
||||||
|
<ClInclude Include="SIO\Pad\PadPopn.h">
|
||||||
|
<Filter>System\Ps2\Iop\SIO\PAD</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<CustomBuildStep Include="rdebug\deci2.h">
|
<CustomBuildStep Include="rdebug\deci2.h">
|
||||||
|
|
Loading…
Reference in New Issue