ref: 0498f7ce251390f3a2e716bf98cc58cbf84f47cd
parent: e93827de463969d30543f51598d2ee9c311a0741
author: GreenDev <[email protected]>
date: Fri Jan 11 17:04:35 EST 2019
Working on input... working on the entry point
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,11 @@
# Prerequisites
*.d
+# Misc
+/obj
+Config.dat
+Profile.dat
+
# Compiled Object files
*.slo
*.lo
--- a/Makefile
+++ b/Makefile
@@ -11,6 +11,9 @@
ifeq ($(JAPANESE), 1)
CXXFLAGS += -DJAPANESE
endif
+ifeq ($(FIX_BUGS), 1)
+CXXFLAGS += -DFIX_BUGS
+endif
CXXFLAGS += `sdl2-config --cflags`
LIBS += `sdl2-config --static-libs`
@@ -18,6 +21,7 @@
# For an accurate result to the original's code, compile in alphabetical order
SOURCES = \
Config \
+ Input \
KeyControl \
Main \
--- /dev/null
+++ b/src/Input.cpp
@@ -1,0 +1,68 @@
+#include "Types.h"
+#include <stdint.h>
+#include <SDL_gamepad.h>
+#include "Input.h"
+
+#define JOYSTICK_DEADZONE 0x2000
+
+bool gbUseJoystick;
+int gJoystickButtonTable[8];
+
+SDL_GameController *joystick; //This may be a name that was given by Simon, but it fits the rest of Pixel's names so it's fine.
+
+void ReleaseDirectInput()
+{
+ //Close opened joystick (if exists)
+ if (joystick)
+ {
+ SDL_GameControllerClose(joystick);
+ joystick = nullptr;
+ }
+}
+
+bool InitDirectInput()
+{
+ //Open first available joystick
+ for (int i = 0; i < SDL_NumJoysticks(); ++i)
+ {
+ if (SDL_IsGameController(i))
+ {
+ joystick = SDL_GameControllerOpen(i);
+
+ //Break as soon as a joystick is properly opened
+ if (joystick)
+ break;
+ }
+ }
+
+ return true;
+}
+
+signed int GetJoystickStatus(JOYSTICK_STATUS *pStatus)
+{
+ //Clear status
+ memset(pStatus, 0, sizeof(JOYSTICK_STATUS));
+
+ if (joystick)
+ {
+ int32_t x = SDL_GameControllerGetAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX);
+ int32_t y = SDL_GameControllerGetAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY);
+ pStatus->bLeft = x <= -JOYSTICK_DEADZONE;
+ pStatus->bRight = x >= JOYSTICK_DEADZONE;
+ pStatus->bUp = v2 <= -JOYSTICK_DEADZONE;
+ pStatus->bDown = v2 >= JOYSTICK_DEADZONE;
+
+ int numButtons = SDL_GameControllerNumButtons(joystick);
+ if (numButtons > 32)
+ numButtons = 32;
+
+ for (int button = 0; button < numButtons; button++)
+ pStatus->bButton[button] = SDL_GameControllerGetButton(joystick, button) != 0;
+ }
+ return 1;
+}
+
+signed int ResetJoystickStatus()
+{
+ return 1;
+}
--- /dev/null
+++ b/src/Input.h
@@ -1,0 +1,12 @@
+#pragma once
+extern bool gbUseJoystick;
+extern int gJoystickButtonTable[8];
+
+struct JOYSTICK_STATUS
+{
+ bool bLeft;
+ bool bRight;
+ bool bUp;
+ bool bDown;
+ bool bButton[32];
+};
--- a/src/KeyControl.cpp
+++ b/src/KeyControl.cpp
@@ -1,5 +1,4 @@
#include "KeyControl.h"
-
int gKey;
int gKeyTrg;
--- a/src/KeyControl.h
+++ b/src/KeyControl.h
@@ -8,12 +8,14 @@
KEY_DOWN = 0x00000008,
//Map key
KEY_MAP = 0x00000010,
- //Okay and cancel keys
+ //Okay and cancel / Jump and Shoot keys
KEY_X = 0x00000020,
KEY_Z = 0x00000040,
//Left and right weapon switch keys
KEY_ARMS = 0x00000080,
KEY_ARMSREV = 0x00000100,
+ //Unused?
+ KEY_SHIFT = 0x00000200,
//Function keys
KEY_F1 = 0x00000400,
KEY_F2 = 0x00000800,
@@ -23,9 +25,12 @@
KEY_ESCAPE = 0x00008000,
//The alt movement keys go in the order of left, up, right and down
KEY_ALT_LEFT = 0x00010000,
- KEY_ALT_UP = 0x00020000,
+ KEY_ALT_DOWN = 0x00020000,
KEY_ALT_RIGHT = 0x00040000,
- KEY_ALT_DOWN = 0x00080000,
+ KEY_ALT_UP = 0x00180000,
+ //Alt up actually has 2 seperate keys, but they're kind of merged together (and also for some reason the second one is +/=)
+ KEY_L = 0x00080000,
+ KEY_PLUS = 0x00100000,
};
extern int gKey;
--- a/src/Main.cpp
+++ b/src/Main.cpp
@@ -10,6 +10,7 @@
#include <SDL_filesystem.h>
#include <SDL_events.h>
+#include "Input.h"
#include "Config.h"
#include "KeyControl.h"
@@ -83,5 +84,232 @@
gKeyDown = KEY_DOWN;
}
+ //Set gamepad inputs
+ for (int i = 0; i < 8; i++)
+ {
+ switch (config.joystick_button[i])
+ {
+ case 1:
+ gJoystickButtonTable[i] = gKeyJump;
+ break;
+
+ case 2:
+ gJoystickButtonTable[i] = gKeyShot;
+ break;
+
+ case 3:
+ gJoystickButtonTable[i] = gKeyArms;
+ break;
+
+ case 6:
+ gJoystickButtonTable[i] = gKeyArmsRev;
+ break;
+
+ case 4:
+ gJoystickButtonTable[i] = gKeyItem;
+ break;
+
+ case 5:
+ gJoystickButtonTable[i] = gKeyMap;
+ break;
+
+ default:
+ continue;
+ }
+ }
+
return 0;
+}
+
+
+
+
+bool SystemTask()
+{
+ SDL_Event event;
+ while (SDL_PollEvent(&event))
+ {
+ switch (event.type)
+ {
+ case SDL_QUIT:
+ return false;
+ break;
+
+ case SDL_KEYDOWN:
+ switch (event.key.keysym.scancode)
+ {
+ case SDL_SCANCODE_ESCAPE:
+ gKey |= KEY_ESCAPE;
+ break;
+
+ case SDL_SCANCODE_W:
+ gKey |= KEY_MAP;
+ break;
+
+ case SDL_SCANCODE_LEFT:
+ gKey |= KEY_LEFT;
+ break;
+
+ case SDL_SCANCODE_RIGHT:
+ gKey |= KEY_RIGHT;
+ break;
+
+ case SDL_SCANCODE_UP:
+ gKey |= KEY_UP;
+ break;
+
+ case SDL_SCANCODE_DOWN:
+ gKey |= KEY_DOWN;
+ break;
+
+ case SDL_SCANCODE_X:
+ gKey |= KEY_X;
+ break;
+
+ case SDL_SCANCODE_Z:
+ gKey |= KEY_Z;
+ break;
+
+ case SDL_SCANCODE_S:
+ gKey |= KEY_ARMS;
+ break;
+
+ case SDL_SCANCODE_A:
+ gKey |= KEY_ARMSREV;
+ break;
+
+ case SDL_SCANCODE_RSHIFT:
+ case SDL_SCANCODE_LSHIFT:
+ gKey |= KEY_SHIFT;
+ break;
+
+ case SDL_SCANCODE_F1:
+ gKey |= KEY_F1;
+ break;
+
+ case SDL_SCANCODE_F2:
+ gKey |= KEY_F2;
+ break;
+
+ case SDL_SCANCODE_Q:
+ gKey |= KEY_ITEM;
+ break;
+
+ case SDL_SCANCODE_COMMA:
+ gKey |= KEY_ALT_LEFT;
+ break;
+
+ case SDL_SCANCODE_PERIOD:
+ gKey |= KEY_ALT_DOWN;
+ break;
+
+ case SDL_SCANCODE_SLASH:
+ gKey |= KEY_ALT_RIGHT;
+ break;
+
+ case SDL_SCANCODE_L:
+ gKey |= KEY_ALT_UP;
+ break;
+
+ case SDL_SCANCODE_EQUALS:
+ gKey |= KEY_PLUS;
+ break;
+
+ case SDL_SCANCODE_F5:
+ gbUseJoystick = false;
+ break;
+
+ default:
+ return true;
+ }
+ break;
+
+ case SDL_KEYUP:
+ switch (event.key.keysym.scancode)
+ {
+ case SDL_SCANCODE_ESCAPE:
+ gKey &= ~KEY_ESCAPE;
+ break;
+
+ case SDL_SCANCODE_W:
+ gKey &= ~KEY_MAP;
+ break;
+
+ case SDL_SCANCODE_LEFT:
+ gKey &= ~KEY_LEFT;
+ break;
+
+ case SDL_SCANCODE_RIGHT:
+ gKey &= ~KEY_RIGHT;
+ break;
+
+ case SDL_SCANCODE_UP:
+ gKey &= ~KEY_UP;
+ break;
+
+ case SDL_SCANCODE_DOWN:
+ gKey &= ~KEY_DOWN;
+ break;
+
+ case SDL_SCANCODE_X:
+ gKey &= ~KEY_X;
+ break;
+
+ case SDL_SCANCODE_Z:
+ gKey &= ~KEY_Z;
+ break;
+
+ case SDL_SCANCODE_S:
+ gKey &= ~KEY_ARMS;
+ break;
+
+ case SDL_SCANCODE_A:
+ gKey &= ~KEY_ARMSREV;
+ break;
+
+ case SDL_SCANCODE_RSHIFT:
+ case SDL_SCANCODE_LSHIFT:
+ gKey &= ~KEY_SHIFT;
+ break;
+
+ case SDL_SCANCODE_F1:
+ gKey &= ~KEY_F1;
+ break;
+
+ case SDL_SCANCODE_F2:
+ gKey &= ~KEY_F2;
+ break;
+
+ case SDL_SCANCODE_Q:
+ gKey &= ~KEY_ITEM;
+ break;
+
+ case SDL_SCANCODE_COMMA:
+ gKey &= ~KEY_ALT_LEFT;
+ break;
+
+ case SDL_SCANCODE_PERIOD:
+ gKey &= ~KEY_ALT_DOWN;
+ break;
+
+ case SDL_SCANCODE_SLASH:
+ gKey &= ~KEY_ALT_RIGHT;
+ break;
+
+ case SDL_SCANCODE_L:
+ gKey &= ~KEY_ALT_UP;
+ break;
+
+ case SDL_SCANCODE_EQUALS:
+ gKey &= ~KEY_PLUS;
+ break;
+
+ default:
+ return true;
+ }
+ break;
+ }
+ }
+
+ return true;
}