shithub: cstory

Download patch

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;
 }