From 6190b1c4e288aa7887bafbc07d858226827095ff Mon Sep 17 00:00:00 2001 From: Sean Maas Date: Sat, 13 May 2017 19:16:07 -0400 Subject: [PATCH 1/3] Android: Animate onscreen joystick Invalidate more often, display nub as pressed when in use, and implement basic nub bounds. --- .../dolphinemu/overlay/InputOverlay.java | 54 ++++---- .../overlay/InputOverlayDrawableJoystick.java | 122 ++++++++++++------ 2 files changed, 106 insertions(+), 70 deletions(-) diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java index 780b441012..c1fbdbc3ba 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java @@ -139,7 +139,6 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener { button.setPressedState(true); NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, button.getId(), ButtonState.PRESSED); - invalidate(); } break; case MotionEvent.ACTION_UP: @@ -151,7 +150,6 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener } button.setPressedState(false); - invalidate(); break; } } @@ -193,7 +191,6 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener } setDpadState(dpad, up, down, left, right); - invalidate(); } break; case MotionEvent.ACTION_UP: @@ -207,7 +204,6 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener } } dpad.setState(InputOverlayDrawableDpad.STATE_DEFAULT); - invalidate(); break; } } @@ -224,6 +220,8 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener } } + invalidate(); + return true; } @@ -333,11 +331,9 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener mJoystickBeingConfigured = null; } break; - } } - return true; } @@ -414,15 +410,13 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener } if (mPreferences.getBoolean("buttonToggleGc9", true)) { - overlayJoysticks.add(initializeOverlayJoystick(getContext(), - R.drawable.gcwii_joystick_range, R.drawable.gcwii_joystick, - ButtonType.STICK_MAIN)); + overlayJoysticks.add(initializeOverlayJoystick(getContext(), R.drawable.gcwii_joystick_range, + R.drawable.gcwii_joystick, R.drawable.gcwii_joystick_pressed, ButtonType.STICK_MAIN)); } if (mPreferences.getBoolean("buttonToggleGc10", true)) { - overlayJoysticks.add(initializeOverlayJoystick(getContext(), - R.drawable.gcwii_joystick_range, R.drawable.gcpad_c, - ButtonType.STICK_C)); + overlayJoysticks.add(initializeOverlayJoystick(getContext(), R.drawable.gcwii_joystick_range, + R.drawable.gcpad_c, R.drawable.gcpad_c_pressed, ButtonType.STICK_C)); } } @@ -487,9 +481,8 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener } if (mPreferences.getBoolean("buttonToggleWii10", true)) { - overlayJoysticks.add(initializeOverlayJoystick(getContext(), - R.drawable.gcwii_joystick_range, R.drawable.gcwii_joystick, - ButtonType.NUNCHUK_STICK)); + overlayJoysticks.add(initializeOverlayJoystick(getContext(), R.drawable.gcwii_joystick_range, + R.drawable.gcwii_joystick, R.drawable.gcwii_joystick_pressed, ButtonType.NUNCHUK_STICK)); } } @@ -548,15 +541,13 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener } if (mPreferences.getBoolean("buttonToggleClassic12", true)) { - overlayJoysticks.add(initializeOverlayJoystick(getContext(), - R.drawable.gcwii_joystick_range, R.drawable.gcwii_joystick, - ButtonType.CLASSIC_STICK_LEFT)); + overlayJoysticks.add(initializeOverlayJoystick(getContext(), R.drawable.gcwii_joystick_range, + R.drawable.gcwii_joystick, R.drawable.gcwii_joystick_pressed, ButtonType.CLASSIC_STICK_LEFT)); } if (mPreferences.getBoolean("buttonToggleClassic13", true)) { - overlayJoysticks.add(initializeOverlayJoystick(getContext(), - R.drawable.gcwii_joystick_range, R.drawable.gcwii_joystick, - ButtonType.CLASSIC_STICK_RIGHT)); + overlayJoysticks.add(initializeOverlayJoystick(getContext(), R.drawable.gcwii_joystick_range, + R.drawable.gcwii_joystick, R.drawable.gcwii_joystick_pressed, ButtonType.CLASSIC_STICK_RIGHT)); } } @@ -785,14 +776,15 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener /** * Initializes an {@link InputOverlayDrawableJoystick} * - * @param context The current {@link Context} - * @param resOuter Resource ID for the outer image of the joystick (the static image that shows the circular bounds). - * @param resInner Resource ID for the inner image of the joystick (the one you actually move around). - * @param joystick Identifier for which joystick this is. + * @param context The current {@link Context} + * @param resOuter Resource ID for the outer image of the joystick (the static image that shows the circular bounds). + * @param defaultResInner Resource ID for the default inner image of the joystick (the one you actually move around). + * @param pressedResInner Resource ID for the pressed inner image of the joystick. + * @param joystick Identifier for which joystick this is. * * @return the initialized {@link InputOverlayDrawableJoystick}. */ - private static InputOverlayDrawableJoystick initializeOverlayJoystick(Context context, int resOuter, int resInner, int joystick) + private static InputOverlayDrawableJoystick initializeOverlayJoystick(Context context, int resOuter, int defaultResInner, int pressedResInner, int joystick) { // Resources handle for fetching the initial Drawable resource. final Resources res = context.getResources(); @@ -807,7 +799,8 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener // Initialize the InputOverlayDrawableJoystick. final Bitmap bitmapOuter = resizeBitmap(context, BitmapFactory.decodeResource(res, resOuter), scale); - final Bitmap bitmapInner = BitmapFactory.decodeResource(res, resInner); + final Bitmap bitmapInnerDefault = BitmapFactory.decodeResource(res, defaultResInner); + final Bitmap bitmapInnerPressed = BitmapFactory.decodeResource(res, pressedResInner); // The X and Y coordinates of the InputOverlayDrawableButton on the InputOverlay. // These were set in the input overlay configuration menu. @@ -835,10 +828,9 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener // Send the drawableId to the joystick so it can be referenced when saving control position. final InputOverlayDrawableJoystick overlayDrawable - = new InputOverlayDrawableJoystick(res, - bitmapOuter, bitmapInner, - outerRect, innerRect, - joystick); + = new InputOverlayDrawableJoystick(res, bitmapOuter, + bitmapInnerDefault, bitmapInnerPressed, + outerRect, innerRect, joystick); // Need to set the image's position overlayDrawable.setPosition(drawableX, drawableY); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableJoystick.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableJoystick.java index 65b63274ca..5024b28077 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableJoystick.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableJoystick.java @@ -18,42 +18,52 @@ import android.view.View; * Custom {@link BitmapDrawable} that is capable * of storing it's own ID. */ -public final class InputOverlayDrawableJoystick extends BitmapDrawable +public final class InputOverlayDrawableJoystick { private final int[] axisIDs = {0, 0, 0, 0}; private final float[] axises = {0f, 0f}; - private final BitmapDrawable ringInner; private int trackId = -1; private int mJoystickType; - private int mControlPositionX, mControlPositionY; + private int mControlPositionX, mControlPositionY; private int mPreviousTouchX, mPreviousTouchY; + private int mWidth; + private int mHeight; + private BitmapDrawable mOuterBitmap; + private BitmapDrawable mDefaultStateInnerBitmap; + private BitmapDrawable mPressedStateInnerBitmap; + private boolean mPressedState = false; /** * Constructor * - * @param res {@link Resources} instance. - * @param bitmapOuter {@link Bitmap} which represents the outer non-movable part of the joystick. - * @param bitmapInner {@link Bitmap} which represents the inner movable part of the joystick. - * @param rectOuter {@link Rect} which represents the outer joystick bounds. - * @param rectInner {@link Rect} which represents the inner joystick bounds. - * @param joystick Identifier for which joystick this is. + * @param res {@link Resources} instance. + * @param bitmapOuter {@link Bitmap} which represents the outer non-movable part of the joystick. + * @param bitmapInnerDefault {@link Bitmap} which represents the default inner movable part of the joystick. + * @param bitmapInnerPressed {@link Bitmap} which represents the pressed inner movable part of the joystick. + * @param rectOuter {@link Rect} which represents the outer joystick bounds. + * @param rectInner {@link Rect} which represents the inner joystick bounds. + * @param joystick Identifier for which joystick this is. */ - public InputOverlayDrawableJoystick(Resources res, - Bitmap bitmapOuter, Bitmap bitmapInner, - Rect rectOuter, Rect rectInner, - int joystick) + public InputOverlayDrawableJoystick(Resources res, Bitmap bitmapOuter, + Bitmap bitmapInnerDefault, Bitmap bitmapInnerPressed, + Rect rectOuter, Rect rectInner, int joystick) { - super(res, bitmapOuter); - this.setBounds(rectOuter); - - this.ringInner = new BitmapDrawable(res, bitmapInner); - this.ringInner.setBounds(rectInner); - SetInnerBounds(); - this.axisIDs[0] = joystick + 1; - this.axisIDs[1] = joystick + 2; - this.axisIDs[2] = joystick + 3; - this.axisIDs[3] = joystick + 4; + axisIDs[0] = joystick + 1; + axisIDs[1] = joystick + 2; + axisIDs[2] = joystick + 3; + axisIDs[3] = joystick + 4; mJoystickType = joystick; + + mOuterBitmap = new BitmapDrawable(res, bitmapOuter); + mDefaultStateInnerBitmap = new BitmapDrawable(res, bitmapInnerDefault); + mPressedStateInnerBitmap = new BitmapDrawable(res, bitmapInnerPressed); + mWidth = bitmapOuter.getWidth(); + mHeight = bitmapOuter.getHeight(); + + setBounds(rectOuter); + mDefaultStateInnerBitmap.setBounds(rectInner); + mPressedStateInnerBitmap.setBounds(rectInner); + SetInnerBounds(); } /** @@ -66,11 +76,10 @@ public final class InputOverlayDrawableJoystick extends BitmapDrawable return mJoystickType; } - @Override public void draw(Canvas canvas) { - super.draw(canvas); - ringInner.draw(canvas); + mOuterBitmap.draw(canvas); + getCurrentStateBitmapDrawable().draw(canvas); } public void TrackEvent(MotionEvent event) @@ -82,12 +91,16 @@ public final class InputOverlayDrawableJoystick extends BitmapDrawable case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_POINTER_DOWN: if (getBounds().contains((int)event.getX(pointerIndex), (int)event.getY(pointerIndex))) + { + mPressedState = true; trackId = event.getPointerId(pointerIndex); + } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP: if (trackId == event.getPointerId(pointerIndex)) { + mPressedState = false; axises[0] = axises[1] = 0.0f; SetInnerBounds(); trackId = -1; @@ -136,12 +149,13 @@ public final class InputOverlayDrawableJoystick extends BitmapDrawable int deltaY = fingerPositionY - mPreviousTouchY; mControlPositionX += deltaX; mControlPositionY += deltaY; - setBounds(new Rect(mControlPositionX, mControlPositionY, getBitmap().getWidth() + mControlPositionX, getBitmap().getHeight() + mControlPositionY)); + setBounds(new Rect(mControlPositionX, mControlPositionY, + mOuterBitmap.getIntrinsicWidth() + mControlPositionX, + mOuterBitmap.getIntrinsicHeight() + mControlPositionY)); SetInnerBounds(); mPreviousTouchX = fingerPositionX; mPreviousTouchY = fingerPositionY; break; - } return true; } @@ -164,17 +178,22 @@ public final class InputOverlayDrawableJoystick extends BitmapDrawable private void SetInnerBounds() { - float floatX = this.getBounds().centerX(); - float floatY = this.getBounds().centerY(); - floatY += axises[0] * (this.getBounds().height() / 2); - floatX += axises[1] * (this.getBounds().width() / 2); - int X = (int)(floatX); - int Y = (int)(floatY); - int width = this.ringInner.getBounds().width() / 2; - int height = this.ringInner.getBounds().height() / 2; - this.ringInner.setBounds(X - width, Y - height, - X + width, Y + height); - ringInner.invalidateSelf(); + int X = getBounds().centerX() + (int)((axises[1]) * (getBounds().width() / 2)); + int Y = getBounds().centerY() + (int)((axises[0]) * (getBounds().height() / 2)); + + if (X > getBounds().centerX() + (getBounds().width() / 2)) + X = getBounds().centerX() + (getBounds().width() / 2); + if (X < getBounds().centerX() - (getBounds().width() / 2)) + X = getBounds().centerX() - (getBounds().width() / 2); + if (Y > getBounds().centerY() + (getBounds().height() / 2)) + Y = getBounds().centerY() + (getBounds().height() / 2); + if (Y < getBounds().centerY() - (getBounds().height() / 2)) + Y = getBounds().centerY() - (getBounds().height() / 2); + + int width = mPressedStateInnerBitmap.getBounds().width() / 2; + int height = mPressedStateInnerBitmap.getBounds().height() / 2; + mDefaultStateInnerBitmap.setBounds(X - width, Y - height, X + width, Y + height); + mPressedStateInnerBitmap.setBounds(mDefaultStateInnerBitmap.getBounds()); } public void setPosition(int x, int y) @@ -182,4 +201,29 @@ public final class InputOverlayDrawableJoystick extends BitmapDrawable mControlPositionX = x; mControlPositionY = y; } + + private BitmapDrawable getCurrentStateBitmapDrawable() + { + return mPressedState ? mPressedStateInnerBitmap : mDefaultStateInnerBitmap; + } + + public void setBounds(Rect bounds) + { + mOuterBitmap.setBounds(bounds); + } + + public Rect getBounds() + { + return mOuterBitmap.getBounds(); + } + + public int getWidth() + { + return mWidth; + } + + public int getHeight() + { + return mHeight; + } } From 3bd8890486015e54c494dfef4c8f3b41cb46d55c Mon Sep 17 00:00:00 2001 From: Sean Maas Date: Sat, 13 May 2017 22:33:25 -0400 Subject: [PATCH 2/3] Android: Prevent stuck on-screen buttons --- .../dolphinemu/dolphinemu/overlay/InputOverlay.java | 13 ++++++------- .../overlay/InputOverlayDrawableButton.java | 11 +++++++++++ .../overlay/InputOverlayDrawableDpad.java | 11 +++++++++++ 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java index c1fbdbc3ba..bc5dd33558 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java @@ -133,23 +133,22 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_POINTER_DOWN: - case MotionEvent.ACTION_MOVE: // If a pointer enters the bounds of a button, press that button. if (button.getBounds().contains((int)event.getX(pointerIndex), (int)event.getY(pointerIndex))) { button.setPressedState(true); + button.setTrackId(event.getPointerId(pointerIndex)); NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, button.getId(), ButtonState.PRESSED); } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP: // If a pointer ends, release the button it was pressing. - if (button.getBounds().contains((int)event.getX(pointerIndex), (int)event.getY(pointerIndex))) + if (button.getTrackId() == event.getPointerId(pointerIndex)) { + button.setPressedState(false); NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, button.getId(), ButtonState.RELEASED); } - - button.setPressedState(false); break; } } @@ -161,7 +160,6 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_POINTER_DOWN: - case MotionEvent.ACTION_MOVE: // If a pointer enters the bounds of a button, press that button. if (dpad.getBounds().contains((int)event.getX(pointerIndex), (int)event.getY(pointerIndex))) { @@ -191,19 +189,20 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener } setDpadState(dpad, up, down, left, right); + dpad.setTrackId(event.getPointerId(pointerIndex)); } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP: // If a pointer ends, release the buttons. - if (dpad.getBounds().contains((int)event.getX(pointerIndex), (int)event.getY(pointerIndex))) + if (dpad.getTrackId() == event.getPointerId(pointerIndex)) { for(int i = 0; i < 4; i++) { + dpad.setState(InputOverlayDrawableDpad.STATE_DEFAULT); NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, dpad.getId(i), ButtonState.RELEASED); } } - dpad.setState(InputOverlayDrawableDpad.STATE_DEFAULT); break; } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableButton.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableButton.java index 4d557b5f28..249634df88 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableButton.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableButton.java @@ -21,6 +21,7 @@ public final class InputOverlayDrawableButton { // The ID identifying what type of button this Drawable represents. private int mButtonType; + private int mTrackId; private int mPreviousTouchX, mPreviousTouchY; private int mControlPositionX, mControlPositionY; private int mWidth; @@ -57,6 +58,16 @@ public final class InputOverlayDrawableButton return mButtonType; } + public void setTrackId(int trackId) + { + mTrackId = trackId; + } + + public int getTrackId() + { + return mTrackId; + } + public boolean onConfigureTouch(MotionEvent event) { int pointerIndex = event.getActionIndex(); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableDpad.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableDpad.java index cd76ce8e87..fa5fbb059f 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableDpad.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableDpad.java @@ -21,6 +21,7 @@ public final class InputOverlayDrawableDpad { // The ID identifying what type of button this Drawable represents. private int[] mButtonType = new int[4]; + private int mTrackId; private int mPreviousTouchX, mPreviousTouchY; private int mControlPositionX, mControlPositionY; private int mWidth; @@ -135,6 +136,16 @@ public final class InputOverlayDrawableDpad return mButtonType[direction]; } + public void setTrackId(int trackId) + { + mTrackId = trackId; + } + + public int getTrackId() + { + return mTrackId; + } + public boolean onConfigureTouch(MotionEvent event) { int pointerIndex = event.getActionIndex(); From d4728807e075ef3d9fc4737a4fef59e029fc20b4 Mon Sep 17 00:00:00 2001 From: Sean Maas Date: Sun, 14 May 2017 15:27:06 -0400 Subject: [PATCH 3/3] Android: Add pressed dpad images for other DPIs --- .../gcwii_dpad_pressed_one_direction.png | Bin 0 -> 3876 bytes .../gcwii_dpad_pressed_two_directions.png | Bin 0 -> 4368 bytes .../gcwii_dpad_pressed_one_direction.png | Bin 0 -> 5911 bytes .../gcwii_dpad_pressed_two_directions.png | Bin 0 -> 6761 bytes .../gcwii_dpad_pressed_one_direction.png | Bin 0 -> 10857 bytes .../gcwii_dpad_pressed_two_directions.png | Bin 0 -> 13024 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Source/Android/app/src/main/res/drawable-hdpi/gcwii_dpad_pressed_one_direction.png create mode 100644 Source/Android/app/src/main/res/drawable-hdpi/gcwii_dpad_pressed_two_directions.png create mode 100644 Source/Android/app/src/main/res/drawable-xhdpi/gcwii_dpad_pressed_one_direction.png create mode 100644 Source/Android/app/src/main/res/drawable-xhdpi/gcwii_dpad_pressed_two_directions.png create mode 100644 Source/Android/app/src/main/res/drawable-xxhdpi/gcwii_dpad_pressed_one_direction.png create mode 100644 Source/Android/app/src/main/res/drawable-xxhdpi/gcwii_dpad_pressed_two_directions.png diff --git a/Source/Android/app/src/main/res/drawable-hdpi/gcwii_dpad_pressed_one_direction.png b/Source/Android/app/src/main/res/drawable-hdpi/gcwii_dpad_pressed_one_direction.png new file mode 100644 index 0000000000000000000000000000000000000000..b7efe0887acad49625d4200ae447d6fd011b0dbe GIT binary patch literal 3876 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 literal 0 HcmV?d00001 diff --git a/Source/Android/app/src/main/res/drawable-hdpi/gcwii_dpad_pressed_two_directions.png b/Source/Android/app/src/main/res/drawable-hdpi/gcwii_dpad_pressed_two_directions.png new file mode 100644 index 0000000000000000000000000000000000000000..2d5055674a642e16faea24757f5b3a746ae6fa0a GIT binary patch literal 4368 zcmeAS@N?(olHy`uVBq!ia0y~yU^oE694rhB3_q?e>0w}CU`q0KcVYP7-hXC40|NtR zfk$L90|U1(2s1Lwnj^u$z`$PO>Fdh=kd;qZO52*LrHp|=V40gDzX#KpOOQ2nt;LFt*ejJ%D1AYc3EB8QJ{ z{)-+pCxq-#)M)BjtIJj--0S&k(v7<>@9xb$Yk90PBKxfAv#8bI)|FgO4ZAvL_PyQj zcVGMQ?8mWM5ye@XyR|FK|Nfh@=jK}u1>=A3I}>zlebc{x+qO~sY_RYmtK0Lp_kR%c zc=lyQNXmYxx=)`@doX-?b)fzG|Lcx3Qsel&)uf-;->6Ng{^O%^KIf6(|C50qIn5vJ z?35Sauzqb<@%4%EMVnGNeunAgPqv7B{wv3{q34aE3d64Bjvguh?z<}p3g)|rY}ueZ zf#rZp+l?)oJEbNtc&Ia?5DZHuGk7qpd9$;1y9MKhHPiL@|Nl1E|NG!j?e#FphMLrP z%e|jpU6qRmN0fUOcL~C(0TpNn@Qo~c{ZjC_1{(X9M0UjU)%Lt zb=Fp~y6FvzHglxq9`%3f;q&HN!d&K!?{fPMWTL})7ij&w;Owp9$t-sG|0b??D3NRIz-&BV6qUbEly| zw7Rr|Ebj!r5C=_hllsTrvR0EGd{bw5CQ;KWXrNs%>%OOm$@eSGKc?xF zb#LY^dLGZim;UHfS(b8SSEfU5hV$GN@AoqA4&toW+21 z%B;VvJf0Ij>``JUxx~-VyjOI^e-$;hs8p^+^X6~m$eVDm&tr z-}m6$_pR=fe4h)8n&iVw&!-FayW0KB{ZliyWb!G_sk8o0HB(`zau#~@hK)zx=KbXM zro;zLpL}>(nF~^c7;M#V7rHY#E?>DJ_W4q|Z`U{KG3+?-eWm?oiwP+^OkEGz9^dQN z$1ZZ|x!<`t86+`#IHSnGU7*8f`hg?a%w~{4IWA;}V5$qNxSm%xCU>FxqjA zsqpCK-~D@jU3K7z4&z{m>wX&7e!026?)=^JXFhekufP0ULF=J{z>ZsAS)3DWMJ+eY zRSE3ug{;ZdA0k42*a&oa&e|o^L5HnB_DIE?H1+V;eOXrGtc9X)%C@`>zG$r z>u;FXAhGSwoX-bx_m=&T_Cb?;&R4))lMORQpb%V)M}Xghr6wnb+H2@yLW41Qc}^85J%Uktcr~bqIXY;ylds$TvML?{r%zfPm9)9 zProf3msOz=yuU~xN1rG5ssZEm8;w#elO}lSY8UT}qoL`wrA*n8BP6@p3@z;!S3hcbDCH-JeWnN6^T+K<+*Di#&G&YM)f4b3s zlK+JS+ng(RYUeiSRm#WRId{Ki^%|z|cPqEB?4MCyEYxWytIPP=`DyJ5?%3r|W@$7` z{eS<$1oin|Z>-|2Dt90GBj^8V>dud6A1W{{m?lxmaO~9Ya*Yt1H&NyD4KwQ!&h1JF zYbm+4Io@|}ck`j{)ekl}JZQ19@OavmCHvr1ioejeJ1aH(cwb1b6JE-H=To(chxK&5 zrK{iBhTpk=r|R3W>CxYk9pA{?Gqk7IKM2kXFu0O9gT;LRzgJ8TuP;g$4cDJh_lUtk zZO1$lNA_F63|4O${GD6>+pgu5*|AWsLv>ooCyp0x%l-&+9XaaA6OhgJJ0wQ3Vx!TX zHA;^cgs%{ePcBRmk!QWgI7{hZ`lod&Q#{xH{r#(0nBDtBL`AKlTc&=3FFW&b~?vcr6hb}3La2{G`@bXzyrF_`CWvheoZbf-$ zuigIPw!Ae%$lb4Mtg-j%!b2IOWcgoxyDoX|*q>cmT70tC>Yf)bRJ-ZocYd4b!Dq;Rap{GZnu9IGvSNNfh975+@F~An>JY=&S33taQ{bh?A+XQBPe z6CwKh8sqgHUEOQV&&as!Sz_klF}up6EZ(Z_quTme62%X{O^-Ld``<{Ef%)fraeGtl zYQ_I|s(*ic{+YS7=fb=K$K{WGrxfh`^fC4+|G~)Gxc{})d{dp0*WBXuR^5`D zmb<;Lcz<;AWd{RMhV7#A^L?fD_ws%3n=kJZp>Zdz#@D&@O%(T)#=sxD&pDpFTX{Vs z{MZilpVyYnzxewf+d-atVjuOYuM6wnGwkK^DP8^jthe!J{y4i6(>n6^G98-f9;A9? z*4>ptb(6bRRM*7>G+lf&-=#8@UCF*QCv4igqibIto4B0m!P0|=4|9Ke7B96s|J2Nj zifR$pR~*Xe*Qj@ka!GEUCj30HaP6z``HXq{`p)0`Jb(LkrmfOHZX93k|L5_(NU6l1 zPcO2!mCu+hZK%HM*}QXH#SO>x9SxW5+q%R?V)?GWONI7-eHM{!H}{p`+$~%DR~=Nd zzqfJ!*Q5M4RafsU5iGm;Z=3X)3mnV`iVr`3CjTu{`hv+^k%mt{ZqGgUXtsZjHrG01 z`wx~Xb~cZ*imOkbVLrKndE*6%ZSGUHaA!5^o!@Znwbh*WSFSkBf3JM%y_c$|s#K7Z zy6t1`RSFLl++OQxb)8jwHJ4F_sf<_ti&kH@1^EZJ&HI>jBfeqYlcu&sCZ__FSIS)I zE7@e{eSgVpcPD#?-H%qkT;6t2>y@Up{2H(AnRhR=p89sEDzc(V)rsNPG;gj~cb~1> z_4<+Qxn)}}rBu84?z_?Ozx1B__7B^V-|;R}$YPEEdRCuVuX*FFx+kZ;3tr91)|SW# z%`0*2x$xuftUDQplJ@g%WxV8U_ceE`7qi8S!i-s`=ko7(HQ}^o_QmkeU0qev*d5AG z&24J5W+{H>_xD5dvb9^Bd3i&Q`v=>x_hay9cM_a$^?fW|2+wtpPlY>6h#_yxm@01*j4Pe>JXZGU1 zh-ucv9a}F+=jW&}Jlg)NWO{dD`o^HUPt!uTthTPp>Hhw;t>d5H{}ZJO@dwuC3-R4O z6%tV)GS#D?Zl_!Io)gn~)i% zZ+l)jzuW6iOyC6P6_Sgh*6m0?wf&|>`GOzDQoLp5<>wy$KI|Q$lkB3@9Aka>K<#O> zAoT({hJruIzvpjEHh*Tw#c@nas9^1+l=D7E7$&@Go@`kJB;UCTxK!LO~3u-yKnD`{cFCS)Y!97BTRh$0l9T^ zZL3<|msUTj+3viX)!XVW-{074?1v^?ocQP3?fW0%&!4!vL*n3OcSGf{O99^^>h4-- zJcJ*$!a<3)!Zmbjcy`oKR3=;x& zzYTkTa1wKv_cc!rFNQl)*aRj=Y2UfU+Txd`{N-=>r+>$nGCr-oQ>cFLDW{-**ynTZ zxy%VCIm>_j{>>op-o=9{LCu|E|8e;jb2E8<&(3^)Dfju?4|hDReHhNDXeTY4<;!$CRzhdH5)9htGc6M|zeynX7GJOBQjvVZShODO!`UmP7C9?tCJ zBjq5o=daU?l5NHFo|Id4Jalo~ypd5skn%w;B#;XPK8YJ)duqAZeGeXhG^8k()LyVac_% zObVU##XSW@&X;edFr-|bv+xJQ0+s_s%@3C_zEoilV!%cO?kn+P(E0pff4_2b!~Q+h zwbiAJC&Ir?J-t*|UGC4F$MrYr-mE>EQ5syanwx<|{N9(=V4pc_i`YtA85tDJ4tGsA zm@Gbp!2{B{1@~|fgwD$oQgzFxG95S|a5nY}i;)`Rh5tbwJu~xXwkDiVV7yR$=j)r+ ziw5(TO9l8f*C?nh5=|Fey7>R2cmLm>dzqASY}#`}HHQ-!Gh}Z|{p(ye=g{SeHl-=0 zSAWZE*==ces^FV8Nn^RP~ i-}}QiGv@vJ&p4N*!J2W)D-{L?1_n=8KbLh*2~7YAl|uml literal 0 HcmV?d00001 diff --git a/Source/Android/app/src/main/res/drawable-xhdpi/gcwii_dpad_pressed_one_direction.png b/Source/Android/app/src/main/res/drawable-xhdpi/gcwii_dpad_pressed_one_direction.png new file mode 100644 index 0000000000000000000000000000000000000000..7cf85d806e944bffa557f5caea7d115e0ccb343d GIT binary patch literal 5911 zcmeAS@N?(olHy`uVBq!ia0y~yU}OMc4i*LmhHupgZy6XEn3BBRT^Rni_n+C%z`(#+ z;1OBOz`!jG!i)^F=14FwFtC?+`ns||WaSfP_f$nM+g&(<^Dz4r)vg^8k6uaGBa z=X3|B32JOijGT--nHFy|Z*>J_d%w4R{$}s_f7fRv|Jd+sR`Htp_s&&W|8GY=zWscY z{{MT`e~W99&lv7AeD;eoyC=9paQ)mjdrj|&Ff+tHSg+Qw#A<=NzJ23Xwzc1%-miG~ zNd0T+F6N-v4~GOrCeD9cZ}(&Ko4>dFndqy>zx}_YeBe+a z^Sqi;>tYn}4?*RA&5;rp|H$z{5xXg*^X;SvqJYrW%n z?^fZ2hd2KF+H6<39WAv&Bd_9Di*Uljj^zRyQuVCG3ltYtUpw$5%$Q+&As8O z;v=cs^=CO3_}TX}@ToT(=6q1VWHARf^KnJU;<|5lJ=RpQNT|OuxBt9y`M(c_8kUU5 zI_!TPTzs|N+^+6Z=YPA4R*Y`#n}65uV{LWFv-;fneDw_7h=e;QfD z)Wg$%rG9NYljEO>e~grSN@b7zo@DrEqH+DzJ%QgJe^;BX_PF-u48#3t0`^-z27JHQ z5pR0pw1YmgtRF+W@PUUc1s04lehsC~eSg09PiNSoB*ixI(yx7Q?%ay|5v^s#>C3m` zc-69fO#4>ZKYPx2m;0P%?z;Ed{_AuZ=iQlleU(gh1nUBYJx088zV$C}tQTC+HTQ?G zUjysny^;Aw$HG5flg|Ct+xPR$#rJmaswdR1llwed!D~PNoH8aIk$R=AtKz&9?DaZc zhdTZCzHb(?@a&h`<#jJv_nhP0z;TBm;kWGWI*mR_|=9 z{lNU@U)1No%#>0tgVqb4dtN@dKF?;4;BUW%ooWB?)GYctcLmqgDKjo!`Wr7$*kS(i zx4-SDGmo>we3%bdf5@Hl^yIWnXEc|6>)bi3e`!j@l9!7)7z7$rY@IwNb$?8=QQdyr zen#60!v)j07$Homx6)BDxOnEIhhsS`Z^qw z`5Qm?w6L;)ho0=8<$HwhzpA@zIp?_lUf%cF=E%?kA~-q zbuN-Rj0`FbQw|shyxXs|Ok0_Cm@#(Y ziHS-grvw*FV>#93(J(IV2>YmG7v1}_^#E{9_uqB9XA(M7?z=E(KF`;VkYB*=iT`8>2LgscNRDI)V}|8?_uKYQ!(w2yPpe3F{D~^ z2r%$4HU=zJ?OLIb5F)^lwL)vv7Z10|Vt&Pzrx`N*q@Q0bS!NvL;?jI0moejlL&z3a z6~{CE7y4KNI5;PDje`{@ki{??z7C&H3AU&+J@t zX-cEVDjSt>g;~Aq41zqa4N6UpFO$9c6^~5u6${R;s&QwMO$k~5yca!2mBUwMv>`a*uvZk#2@&YE+|1TbS2-dAmshMXewb!XlzN-HD!@1Ah zeS%e9WH`Ru`)={Q{kLPjWh}F9T=4Sd_w&I$p2hNh&Yl^*_t~o&7fHori}Pk_IQ`?AeSg8v!0_8MzNiX2ZvJWQpI^-KqNs7k zBd7ddkIo8u+`H#K;hs?0Yx?!zzT`f~=8le)H(&3byZ=6mi7>n6 z=It|C(tkGh%+^tw8n_@T
  • -oQ!NKA?;=Dl#-M0z%JO5wAB*e@Zy zPZ)epx@%r^@b!4N>u2qb_u?C)*Gv#PV%OxeTZ+*@_m-Y`K(OeGgu_1z_vsl+PviY3 z*d;dUjC?TL1*KUg{KuXrDmBdD?PhdwE}dbep?6K8TYj~c+xvMNmT+8{ZIfc$GDV~8 z{qZMv3*7>*&0!9i@MZet^J$CCUTic>h%kG#@%KL6-@i`PbGbIN%`$7SyK{UB)2W{C zt2Ax&HVJG-xOY9a7&4_P-i+vrp`(11h z{B-Q#%jdDWZ!aqwcCme2)nPY@d;bh&hwvXaYwY<_z3@PmsoRp(e!hj&w3XvcQc5rJRw@Xoc&5?(xgpnmfP|xwsIYK_j^in)yID`HvP}o zRCki4(UURpl(nhn2EJ9bp6CB94O7YXZ?NOPu!MCQi-2Z#d~wn$X06OyGF^8}ee9=~ z^iN9d4fE#vvh=H?=33zZzW2FCHB%33EOt7hslvbN#VHQ&o(U@)e!ktIvA}qq`I%pd zHMgbWCrQL^`m6LkfzNaQXuKf7dYEu)PT)0EnMI(6$=*cfv21Qks^t9t!| z_yjIA1zo(Zzj+DQLMInqN1t5|*9!wC3rt#RU9vzrYW>uh@7%XizRXzFu<8A64aVTF z*6|&oZ)c*Eb3-`0nD%XeTvs z$L+J4>~3d$6@4dZr8_GxZ~Z$>C@AiNc(bA_gUn?kJ*SE1LjGHw_?!H1`}v>UVv0Lo zI8Uqp>=0~Jr(fhgneWgSHiLZ}4Nn%&65gmJ^!-((M`G-xlAtXvo}FG^2~_?5pXOk{qxTJ@#KW%dg*gNj>NUKIb! zyB@}JWD4T}llpFhE0bLrLlm}fXl~XEQP5zL;7u~B_lRatmp|fTwZc*;al(wFB2#}Y zT6b1)zqzeyeE8&dy#31#{MgTPE9!8Pc(N+Pq)yAXOHN2SXo{*n|5a<;G5O=~B(LBd z`2kNYoOaF<_!2zx@0*Ep?KLh>uTuF_&XRF9Ea7|Q*(&*-#7qg z`9{J0;_sxO@9n0&vl#i$i3Du^Z9J`}|5B&|!_$(^9+j9A2Q8;An)CVlT1Bs1B{Sb- zmDCBJmLyJn*6LM$AS?gyoBcnE&eZOnG1=CX?fvY_OIJ%4N8NtToLZ*&?9yiO{WqR) zELLq;dmz{Mp4wOW%BYT_>={AID}S$>Ao^{Flg;wuiq{!uopyUN-}<(Ql-Tk~Q}-%; zg}*^7cQc zK`}pr>=BOW=hK;Gl3u8&Eq&9e)OJC;B!1!5UEv=-c*yXVoi(x-DVBKaoW<<5m+@Tf zzD>7_gqk#$*9jhW3|3j_!M<|A)Xbdp{VtrcXCyPGP4wE_Z6wOQF^p@qD}!m;)0tg6 z*FQHEFJiKexK?}RnN7V#)VauT4&zIw*O)9eHf0Plj$*qauzB(Hd;3HiD<rq(yZ}#jiIo=&-{Mj#temWVTX@L zK2QGp^M`$F_j11S_;cs$ELm>+daM8EsPX#DXInY%Y%e{3yRO39PTJ$<7LT=ZPnN!8 zuJMtRyQJn2dF<`#Qn@9qNlaz>pAt4~oMN_a?Tu>Y<2t@y=f%qjo?X!WQorcW+V%CH zIxoMy6PEk=-S@bvt4bUP%4Tdp<9ru;+l?2ok+F1#0 z64KD{eV%wW{>-V!EsdU^+AbbAb**rjUZ>jc=Lc&PQx|p~SYP?Z_&@W!=d1pH*k>$% ztmGZbf*C`!_pJ4kSq)|&?D7Jb-$sdrXl*vZQF+Bv57H{C8jR)04C z;`{e8zrV-)u4Q_;`TdcpJEs}Fy+7a5!ce%z(x3mO!=i;YlZDU9$@@MGb=!4{qg`UF zADisIxF=I%eoYnBmpH30SKM{+n}EjhjV~>2e?4n|wKK~8-<{jH=4Nj{z4bXm)sDS? z5BAqRmaQ&MD*Ul~_P@7xEo_uTrrRwD*w;PqEp0zC{a@D(2l-QWNgC=d-x|r?v{Lf_hh-8 zw@rJ#C0zNm@!lShO>25;rkt5)qrn){Kj+3onSU=OeD~Y8wXHt)vm?kj^2e&RGe!Og zIk|lEl z!z`6YGt$4VdA2T1Y5$q82fhg9YA)Zf_(ko)$anWHa_=j8V{7NdwCd+M_3W0cT+W2_ z){`;}wowPC-}X*;@I9v`O_FEUSNF@mc0Mr3a1f2$v4Xv*r|AJp1czWkQMKz#VF|gP zZ;bzDxNY$&bZ>6HReLDovdij!Q#0>ti7(8~{PVh*;pqj@=Q4Bp@5p&={L+HWA(x`$>J7{e@XdfoBqKZeXmL`{hQ6NX zub1(O8e6lvrPQsf47%ED7ydF>dipkh7sjoHiTX;vix&L!*}m@6rDgWobD{*9Sntis zxhk#iH(%|++V$(~clrMgUlte=R$3@35b7e>yGr{MquL?|pT>^N)aC3mXQ=Ply0iJ^ zarwG==N>uEv0f`b$(lbtBYMTUXRWIpOueLM-|(v1SskmoUMYzyrdU*K9n<=(w6!iS z3-4K+y}!8n{Qink9J!FR;v+EfKE7CD6g-yXtIK zd3n*icdO&}eEhIl+rFSoS}%fW4SU{kW`=WfXZ^c(@7ukHQ(N72r$?O$zMtQ`AId9Lt6UF&eE%a*SE;lNSo=0>xU`o{QSk)`c}AM_qW$8g%eUP zd}`V-L!%Nh%7khaZ0w0vq76rzckBr}pr~!hc#QS#?Y#j@rCCnzpO>ZX*Dx{h|CROs zP2M_QtaDDs`UO;38K~(WQcYSCkJZO`q2>{Tw5c;M$Ky>kJux1g)5H zI7surkr+dFA@u`?4FCQ*Hj|T`?{pR4k&r;ySF3LA-|^n^KvSW%o=xHJ`keiWTD~(= z9!e@U3RDPfd;K={&hO@}XPK}6ayj#M`HTMVrTb@YTeOP%dwoda;#+su+SUJCUH;J8 zuOan;?sBvG?;ld4-8sZO8JPsLTeIpv&HcTbP0l+XkK;&;5yI;)#sm0@HXkI2mIC7aRVo42V-voR#s2d7p%`;R5|x3P;!%`AaMg zRKB=C-%G(UHC|zLg3}!Z#WR~;@6zEo{ja#ZEUm0++3t6?$J>AHt3JQ?e)!$1wk4&t zq0f1&gJbV5S^etIyPx%S(+v_V+gI->u6fLUICdeE0{5S*ECScfUw)iE@6dwQw!feB z@0Pzk|72>Bl**?^wV4o7 zHDX81k#{wv?<-RM6S+fPR0XA7!r~g3=A1&NHF;DFsQLH2s5J#|5_UNy4+s2 zQ*<-KYt6;g|K2}7U-#g)fDyx*#Wf!~kH3z;{o}>W<@-vHNi$sYdw2Ke2Tcx%n(M9S zV^%gZCY*g@ns+Cvt}?dvp3Z??o}o+EYOK1GTf>*aAh9TA;s3zz-bZvAI(e)+4H)i} z$sUYps1#&A5T!MrhvD_=I;LqUrWY9sl=j6-3Gl>aU4AyPcK=a^*D}A?cS$f@Gx=rC zAQSpk+srnB!D7v?lMEZqxy?Vrw8orc$#-iv!Of3WEpOJUKgY0P+w%Gcm5q!EasT}{ zXECWb{}bV5V4qz-EA!9NhaJ)zST_WHcx%xhdV=!|)19(s{wZP!p{?I|KZGsPOc6`i z|5@L-Yk$+!mz+`z-|YXh&;57M`9REpf07RKH?91<^(ce(ieGh){a1aE{;z7d>qn^Z zzo3-=MxWykEpT_?Vfg!R?z403H<}Jy4XN9H+puTtsyk1SeoVAah65r>=YOxWfPu0`oHhZ{@E%_8`3UhIVFVsx<0S2 zFW&dEt2WEpj-SgHeVr}CxKg7bgw5eW?K9RhOgwtb3;IkaoHJhIa7dxyhF0Thp?@cP z)-U-vyL&yW&70NEybKyWHF>{Izb`$zm%$`qnnX9_ucX>pGg(!*9Uic0R51YDwTmAtC znL`__8DH}>yql8m&8Vv-lJdeaFicUw`G5+8j1ITNl3&H_3yvRjIs3cg)DKQYz82*$ zmdq2vj$gf2eEP62{`miwUzRW9zmgoJIDf_aRXGQB4tTb_cdvchQuCxc(g((J6rsxY@7S0bSIs^FDwsi(>@^N;*#=a z8!rR*wB_4>>b-paUMTh1_hPBL2lb~jA8uHfKU==ray;^qTukfIM-JB^jI1xl-y zR=92YRa^h+`n7*63_h=vR!C@BCMYtiszF>V(SJYFolJ&^j5pt_Z6+P&O*!oozR-JL zkk9`ur444!_zgL~T;Ahgr2(EuoFI8Pstr~Gsrm^G=TgkEe zN0?+@GhW{3(9j|Ne*WFxYrSv#Kl+yB$s z9B-8gGz)ed+|<4M<-gDO|GeAG?7i$Z`+AxEJKo;?6t< zU*Cx_+|j8rTHv)$aazN&^S;>)lb8H?xnD$U<)It7F*3D%|90+j(+_1_aO|+v#qRc} zTuQnT5BZK<&#!B~->C0f|2s0~@Xhb<{_cu-AULh^bZ(EX~crb?7R5tzPH6CEAC`$*&18_ zDtkUVhsD>2AMEZWMt(ZDY)P@@mPcQ=>RXzVfpz}>Odp||1hu04 z>eKtL{$c)ObW=Fa@@cU8hs*yLEf!-kH=Hd}>A=N!`}n1n`pc8$A4p4ZNa$F_J-8?J zv~!g_hk)At*Z#Rzr^i?{S1H_mb33s9_5a|%^Sf_1ESt-)qVs=HF3+*J$sB&7cBL%) z0?gbm>)*`3|36mei34?^Jko_uEyL^|7j*Qh(%gt5 z7jvSnyl2jh+9OO8L+|oVk<@c^XTI~fw(E0Uu7ta<){S44_gC!7WH+CtutMqML*8GU zQ7us-)0=j?It=FiKHugLW#1pcA(Sd;A+2f|aaLW9_e!(%)%LRjMa4ch zkInD9YAO9MPuhM7muc7jRc$8i9 zMs{_*9b5gJ+VEK~6vO{r(yTGnWq8ZozvR!#Bu~}aIXfG#iB?Q`96x7fd0*rFd%~wC zyT4j9LswPimE+3!X?Gr2&u_ipEI*~UGwZ4l(~6JpE}yH9mi5_bpMFk3BRrsQqI|#Y zW}OEo6cekjTBlDruW6JJs^~JAVOxFr-MtxKKA(}-61=ni*mje12_BIQvLDkue*Ou0 zrWne@_3_H9XY0c&9dC2-`7*s&e4hX2jU6SgI{&WE$~5b2%V&IXpm@Gt{kcC=ulUQ_ z&(Hc@#h@Z05}0WeuxTYzN!|5>eP+la``{!Z303`W(vFtK^xUm zj(j{JbNZm?O2!8fOh-3Kow)ffe`VE*$vRq3C#PL&ziKRV@W95q%`Y4b-0#olVd(Y| zy?lv%VfFj@CbEoo|6JYOurQOi@C{2#l81?->+YG6-!e3--yLRSIJ<&l*@}Hn{`mOp z-<3Ig5#za6{|+pf{GC1Yo2K=@-{JpGayfPvF0}T&j04;XD~VL|0Vb5(xUZg-xn@>Ae|)hV6h^9DxQFgUng4f?k(G!x2JsMiqS48j_1ixLn{%OzG;;MJC#+M9x z8Ee8Wa2E33Nna_S-uhrt-=hCd^a~kwXfeF_zTQfIdDAad1=9+TwG|oG0*hWPE##|G zGPo}_MQPUpzPfvCUyla0_%Aqz(Zo;qd zcJ+X&`QC}~iz;&#KA5c)7obwOrfvV8sQ-MfAJ|hPE9ReyzixKXu%54*k>O-?{=LYZ z$qB*=cevt<&-d`pl=k3%yv?WQjq6Xme~=$%_uYb3vwwbc%Y>~p zOF8b}irGK+`)AjM+hZAoO}Q7SH%v$sGunLNvd!Z|)%!mz_mBN>{3(O{jhgfRarHMJ z{_k%OSN?m_yzWWUYKP;W*bBs0*&k}%YkAtq>iaSa#xpk$Y%hsAq`1obh>wE)X9ej` zZCZ@4Zy&bw*4e%L-%1JJ@|y3$_jf9+=zH1!`{v#MwG5A085YdilP!I`^|71Y1JSy^ zqyW1Qx<^Ixt8BS%J`g*;H!gFUb*w}4?b@{ zXIJ|};_(GNg&nJp$6da+c=qQ#f|**sWBt#Z(pcW$zo{`#+}Fm)EFhNQ(gKHPPLI|e zEVj^KRPdi?`LCkl`4^=ahp(%nchs#>_WgQz`@Wrq&?=iE~M|HHPwuP^lX!@2fv{N?{8$k}mBS?+)T@cdnc$A3gP zINbaHn|uGCS34)mp1ijI(z*33Og7BD%`IRN%Eae;*xdKOGIQg+Z?5Mbu^V;$w0pf| z&VjYY?|-cP{{Ojjey&{i+nS;;{pEEp*SZ&;bwA1Uqw{k9eT&z9%nU7@@iXnGT@~Nu zHHZ1ZvYV5;>=!B3burFAvNyi3)M3Rj0j}-~{$DRW|GRQWRvg2JtJZd3ioZUwST{?o zK-A5>__VtY%iC+`Wv6Sd=4%x<`L{>*t=F;}&iB8r%w|}5W3ts>$F;TIf1)=%T)!Zx z`kdb6Tlf83Z*eX>`D2IOwpOtwzdf&(=YL=H>`T@m^Dy&23l^3+AA2AevPwL%-gxo) z*#|S4PBy32u~ihG5ioCFVemhr;@{U@=Bsb-+Y$NQt4~2>iC*X9!{SFKC_d(XBUbJG zO>l3U8HWSUPVos$8zzXRSwu6=m&(4sk>OGaQ%Rb9$nE2+6ALwOF#q1OpY2J*n}Y_i z4t$JZ!F86-;aqQ4+<0)g(6K{iLDg5~qaq81RJzcl$@pZPgw;JIA zsgikW4LgLtZ$8Cw=|01zOZ=iLAsTv%7bdngeZ4flc2?o->FYKt7X8Ya_58}w`D_h# z@4i)pzIxd7qH(iseF|?v3qf@uh6(pGuBsZVq)ZK`)_vn`>HpyvzXV+_->F6`8Fj&!fWU7?Fgi{|?&;9hhX&Ynme9GNVSF65yhJE48 za?_CidT#gs+Vvanf8f{PTQU91pYOF-?_8OCvw?*z_g}5a-OC0BM-dCFmQ!ChehT`z z@6-_oeS!7U|NQZu7#n=C$@jM1t{sAPxCg!e7)oH z`{e83#eTl;7J1%Y>G{DX;KGjWa{HhBbvgLEGx68gg-i}<$CyQq@1CP|ktO3F|NOas zO&-b{CAA;qB;1b3O@%ea|cF?Ina_g%|EUFg1C#`H>?21;1-gxLLdK zR(hGe7w5VcfAC=L{7p)p&fECDPMTZ)YRUCHZe+Z-vJ;rlv*z&L8dCzE9ue?>xJL zOIk;nPfIYrD1IIi78mzX$xt9i{^cvVO<(=aWhgkgvFJwr>Ax4e{_Yj8*5_zi`!*hcpSW^vij?5_Y+?G7Iqk~h_E~Fd}V4Q!@-5ivMnS(eOlMJv}ciIWLsdv4K-IN=zXVp}>!#w+JHS5{^#meUE+=VL_+Woyh`Td2} zvL6@SPk6P+yQP`$NX+wRXBjxsMSNxS^B-7zUhHnWG~wIR9Rl~3RzEzKJ^9V1mpfn8 zUHQlFa(eZ@F0Jycnyf8_rSC17^!EO|rCvFCFNcd*HsdmW7l)^+-ko=PlYY2=P~y0h z_hnnjJ3GH$Y^BrN!+GXgvYhIcy}0?^P2XS7EEM`Ww2DFmEu(JDYgB%I?A?`TnQv;p zY}78{3om^3?!)!T$MD~goE!?&*1cJG@e#Ngx-(rb2Z_xcO!dhvVB z_nzpsFMBQiNA;nrYW>M)lfPVH>NKi$;JGkE?~`mzSXuLQ1>wv}o8>C{mzU%-mE`@p zd}e=u^ueF|-mh`ovh$d&tff?_^w*WWg8l2R>tB5LsV{o>Dckq|A3scAaCr{*4x@$# zPcJ>Y=UTb^fAfc+gnLsJ_U+tPD#a=At*g}konnRV-umqfYyJPrw9R)2xwzxrn(f<< zPk-6?>($b`?9=TMYLw+PKiy$G5nCa3Ks&DZZ}PvS9g^Q#QZN1Z<@x1TWvapZpPmQb z+yBm*?%Y!)YUm44aXdQQ`Y1y7Xb9bd}5yWZ6D_4h+9>V^_i&U|=2 zx9(h8ZR!5`hN~YMmxn#cSZrl#w|V1F{{A?*I4_GGw-3)}|8QrjvAjg6Y0QF^_phtn zFV~psbnt_J*YD!6(xSYt!dm95w)y4S{dw`!{1C$ift}3$b;)0jPc3#*{8YX5V8Y4| z6H@;MTXUp17YJux$TSMQv6|9r}~zTWfOwfL{| zjjfa{LPAlCA&zpPlzI_loz)(;m#?bglTV{95J9gh+mvXHbm=ARBYA923=vsQt zF7Eu_mvhtpw=gDTZf0N%uDj$NH$QS`-Ml{+cWKtTGB6ab(JP(8x71o&Z2ryX^=q%% z=WriL@cGt1Pgv0T|52Ii(8fZH|{f#*u?5^ z?e%-H`ZU*nXN&EBJ>6gXMvnjc%d_AA{CRR^ms7%lr4Qu3zSd6WH~6%CeeIu(@6#=e8R@x?Sd0&DNl}tnumI1-s4~?|#J| zusP|{iHH+P4T@C^KGV5QMcbx{mTGwa_hEa_)Uu@gN^jLwec4l)lNUxaENDMn9cI4X z+b(sJlvu-sozi>kznL#xKZkWfk2V9l#{6r0pKYHN>2Uq@_xYuUU)RTpIhb@`zCL9y zpI8E0tM#+0b16T>8dw(mWwsCg=M~-1>|{SVbUpKgx&OAVV|MWQo6XzsH}CU?P3NPI zFl>HavG&boF+&Evn9oL$FRc!&dDSrU|5h*NvrKE$8CrC{#b+~E7(SiNz2QXt+|3Nu zf72K*z1)7HK3BJ4Zrx@Ewbxt>(qE&B8D>0>FJ{=_m~dCOVJ8DOlP`|Za&%!2Cp}-G zH&%+w2dX;n+^AcU=f?RX{`}94j0tB`p5M{`CvdkR;nT#;_21WhovXF-`nS1{H=5_~ zeRW*F{_~&3-_Pv`zQeHLkG9Eey^{2)f)YQ$$T=)j;K35 z;)T!F$NsXeTfF)M>zif%_doj1ubOGSi?h>v z1LyX~LSg@ZJ;<{!*s(i*`oHgsZptvYoXMAdfA9a<+XXYFce6be$~nY3=kKw<`p5sN z{A*>5W(gJYhbXGxpUH1m2n+YS@Z6knQ!Ym%o7?`zbyc%5|m}!cI!u{%8eqa$qd&oHauId z!05N`&uPP7IxL(H8x=hmniLp0nphM#gc=YG6j35MeHLtb2TPkBPCrq6ob-XkBGV(k z{uy)sy!ub}w%>B+KeDw|Ina5S-~QW-n(N{=1+Svd{X5nx|D)oOqyy6&m74Rd^(Aaf zv(>KGU60-WL*=-^BnEXhbNN3nyyxCbzF+ui@A-mQj|SnU*-!q3{y&jf$$wZ-<$&kG z1r}THw9ob{j3v^QL@I*^36bh)pllo4vlHFzHTK0|Z=e2l>FB?SIrA%KzII}oBVaST z?k8JC%@fJr57x$r3q4pe!{L|kVfE&d#<${c+_yeks>tZaV^{mzoM*p5T$LRAzenwQ zwR``++iS4y)Yk(CRCn05A9$R;@BF`SYj;;A=%0AXSkma(Fu84wzjnissS7w=1XLIt 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 DY?VLS literal 0 HcmV?d00001 diff --git a/Source/Android/app/src/main/res/drawable-xxhdpi/gcwii_dpad_pressed_two_directions.png b/Source/Android/app/src/main/res/drawable-xxhdpi/gcwii_dpad_pressed_two_directions.png new file mode 100644 index 0000000000000000000000000000000000000000..fb99808b6c1de111b0b4097bfdad91fc153a9ff6 GIT binary patch literal 13024 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 QU|?YIboFyt=akR{09g>$#{d8T literal 0 HcmV?d00001