Initial Commit
This commit is contained in:
parent
7226a94fb1
commit
b117a7a1bc
9 changed files with 294 additions and 0 deletions
39
Makefile
Normal file
39
Makefile
Normal file
|
@ -0,0 +1,39 @@
|
|||
RELEASE = 0
|
||||
|
||||
ifeq ($(RELEASE), 0)
|
||||
CXXFLAGS := -O0 -g -static
|
||||
FILENAME = debug
|
||||
else
|
||||
CXXFLAGS := -O3 -s -static
|
||||
FILENAME = release
|
||||
endif
|
||||
|
||||
ifeq ($(JAPANESE), 1)
|
||||
CFLAGS += -DJAPANESE
|
||||
endif
|
||||
|
||||
CXXFLAGS += `sdl2-config --cflags`
|
||||
LIBS += `sdl2-config --static-libs`
|
||||
|
||||
# For an accurate result to the original's code, compile in alphabetical order
|
||||
SOURCES = \
|
||||
Config \
|
||||
KeyControl \
|
||||
Main \
|
||||
|
||||
OBJECTS = $(addprefix obj/$(FILENAME)/, $(addsuffix .o, $(SOURCES)))
|
||||
|
||||
all: build/$(FILENAME).exe
|
||||
|
||||
build/$(FILENAME).exe: $(OBJECTS)
|
||||
@mkdir -p $(@D)
|
||||
@g++ $(CXXFLAGS) $^ -o $@ $(LIBS)
|
||||
@echo Finished compiling: $@
|
||||
|
||||
obj/$(FILENAME)/%.o: src/%.cpp
|
||||
@mkdir -p $(@D)
|
||||
@echo Compiling $^
|
||||
@g++ $(CXXFLAGS) $^ -o $@ -c
|
||||
|
||||
clean:
|
||||
@rm -rf build obj
|
2
src/CommonDefines.h
Normal file
2
src/CommonDefines.h
Normal file
|
@ -0,0 +1,2 @@
|
|||
#pragma once
|
||||
#define PATH_LENGTH 260 //Pixel had the path size locked to 260 (dangerously low), if you tried to open the executable in a path with more than around 220 characters, it'd crash.
|
70
src/Config.cpp
Normal file
70
src/Config.cpp
Normal file
|
@ -0,0 +1,70 @@
|
|||
#include <stddef.h>
|
||||
#include "Types.h"
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <SDL_rwops.h>
|
||||
|
||||
#include "Config.h"
|
||||
#include "WindowsWrapper.h"
|
||||
|
||||
bool LoadConfigData(CONFIG *conf)
|
||||
{
|
||||
//Clear old config data
|
||||
memset(conf, 0, sizeof(CONFIG));
|
||||
|
||||
//Get path
|
||||
char path[PATH_LENGTH];
|
||||
sprintf(path, "%s/%s", gModulePath, "Config.dat");
|
||||
|
||||
//Open file
|
||||
SDL_RWops *fp = SDL_RWFromFile(path, "rb");
|
||||
if (!fp)
|
||||
return false;
|
||||
|
||||
//Read data (we're using SDL_RWops so we can load it with the specific endianness expected)
|
||||
//Read the version id and font name
|
||||
fp->read(fp, conf->proof, sizeof(conf->proof), 1);
|
||||
fp->read(fp, conf->font_name, sizeof(conf->font_name), 1);
|
||||
|
||||
//Read control settings
|
||||
conf->move_button_mode = SDL_ReadLE32(fp);
|
||||
conf->attack_button_mode = SDL_ReadLE32(fp);
|
||||
conf->ok_button_mode = SDL_ReadLE32(fp);
|
||||
|
||||
//Read display mode (320x240, 640x480, 24-bit fullscreen, 32-bit fullscreen) TODO: add more things?
|
||||
conf->display_mode = SDL_ReadLE32(fp);
|
||||
|
||||
//Read joystick configuration (if enabled, and mappings)
|
||||
conf->bJoystick = SDL_ReadLE32(fp);
|
||||
for (int button = 0; button < 8; button++)
|
||||
conf->joystick_button[button] = SDL_ReadLE32(fp);
|
||||
|
||||
//Close file
|
||||
fp->close(fp);
|
||||
|
||||
//Check if version is correct, return that it succeeded
|
||||
if (!strcmp(conf->proof, "DOUKUTSU20041206"))
|
||||
return true;
|
||||
|
||||
//If not, return that it failed
|
||||
return false;
|
||||
}
|
||||
|
||||
void DefaultConfigData(CONFIG *conf)
|
||||
{
|
||||
//Claer old config data
|
||||
memset(conf, 0, sizeof(CONFIG));
|
||||
|
||||
//Reset joystick settings (as these can't simply be set to 0)
|
||||
conf->bJoystick = 1;
|
||||
conf->joystick_button[0] = 2;
|
||||
conf->joystick_button[1] = 1;
|
||||
conf->joystick_button[2] = 5;
|
||||
conf->joystick_button[3] = 6;
|
||||
conf->joystick_button[4] = 3;
|
||||
conf->joystick_button[5] = 4;
|
||||
conf->joystick_button[6] = 6;
|
||||
conf->joystick_button[7] = 3;
|
||||
}
|
17
src/Config.h
Normal file
17
src/Config.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
#pragma once
|
||||
#include <stdint.h>
|
||||
|
||||
struct CONFIG
|
||||
{
|
||||
char proof[0x20];
|
||||
char font_name[0x40];
|
||||
int32_t move_button_mode;
|
||||
int32_t attack_button_mode;
|
||||
int32_t ok_button_mode;
|
||||
int32_t display_mode;
|
||||
int32_t bJoystick;
|
||||
int32_t joystick_button[8];
|
||||
};
|
||||
|
||||
bool LoadConfigData(CONFIG *conf);
|
||||
void DefaultConfigData(CONFIG *conf);
|
24
src/KeyControl.cpp
Normal file
24
src/KeyControl.cpp
Normal file
|
@ -0,0 +1,24 @@
|
|||
#include "KeyControl.h"
|
||||
|
||||
int gKey;
|
||||
int gKeyTrg;
|
||||
|
||||
int gKeyJump = KEY_Z;
|
||||
int gKeyShot = KEY_X;
|
||||
int gKeyArms = KEY_ARMS;
|
||||
int gKeyArmsRev = KEY_ARMSREV;
|
||||
int gKeyItem = KEY_ITEM;
|
||||
int gKeyMap = KEY_MAP;
|
||||
int gKeyOk = KEY_Z;
|
||||
int gKeyCancel = KEY_X;
|
||||
int gKeyLeft = KEY_LEFT;
|
||||
int gKeyUp = KEY_UP;
|
||||
int gKeyRight = KEY_RIGHT;
|
||||
int gKeyDown = KEY_DOWN;
|
||||
|
||||
void GetTrg()
|
||||
{
|
||||
static int key_old;
|
||||
gKeyTrg = gKey & (gKey ^ key_old);
|
||||
key_old = gKey;
|
||||
}
|
45
src/KeyControl.h
Normal file
45
src/KeyControl.h
Normal file
|
@ -0,0 +1,45 @@
|
|||
#pragma once
|
||||
enum KEYBIND
|
||||
{
|
||||
//The movement keys go in the order of left, right, up and down
|
||||
KEY_LEFT = 0x00000001,
|
||||
KEY_RIGHT = 0x00000002,
|
||||
KEY_UP = 0x00000004,
|
||||
KEY_DOWN = 0x00000008,
|
||||
//Map key
|
||||
KEY_MAP = 0x00000010,
|
||||
//Okay and cancel keys
|
||||
KEY_X = 0x00000020,
|
||||
KEY_Z = 0x00000040,
|
||||
//Left and right weapon switch keys
|
||||
KEY_ARMS = 0x00000080,
|
||||
KEY_ARMSREV = 0x00000100,
|
||||
//Function keys
|
||||
KEY_F1 = 0x00000400,
|
||||
KEY_F2 = 0x00000800,
|
||||
//Inventory
|
||||
KEY_ITEM = 0x00001000,
|
||||
//Escape key
|
||||
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_RIGHT = 0x00040000,
|
||||
KEY_ALT_DOWN = 0x00080000,
|
||||
};
|
||||
|
||||
extern int gKey;
|
||||
extern int gKeyTrg;
|
||||
|
||||
extern int gKeyJump;
|
||||
extern int gKeyShot;
|
||||
extern int gKeyArms;
|
||||
extern int gKeyArmsRev;
|
||||
extern int gKeyItem;
|
||||
extern int gKeyMap;
|
||||
extern int gKeyOk;
|
||||
extern int gKeyCancel;
|
||||
extern int gKeyLeft;
|
||||
extern int gKeyUp;
|
||||
extern int gKeyRight;
|
||||
extern int gKeyDown;
|
87
src/Main.cpp
Normal file
87
src/Main.cpp
Normal file
|
@ -0,0 +1,87 @@
|
|||
#include <stddef.h>
|
||||
#include "Types.h"
|
||||
#include "CommonDefines.h"
|
||||
#include <stdint.h>
|
||||
#include <string>
|
||||
|
||||
#include <SDL_main.h>
|
||||
#include <SDL_render.h>
|
||||
#include <SDL_keyboard.h>
|
||||
#include <SDL_filesystem.h>
|
||||
#include <SDL_events.h>
|
||||
|
||||
#include "Config.h"
|
||||
#include "KeyControl.h"
|
||||
|
||||
char gModulePath[PATH_LENGTH];
|
||||
char gDataPath[PATH_LENGTH];
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
//Get executable's path
|
||||
strcpy(gModulePath, SDL_GetBasePath());
|
||||
if (gModulePath[strlen(gModulePath) - 1] == '/' || gModulePath[strlen(gModulePath) - 1] == '\\')
|
||||
gModulePath[strlen(gModulePath) - 1] = 0; //String cannot end in slash or stuff will probably break (original does this through a windows.h provided function)
|
||||
|
||||
//Get path of the data folder
|
||||
strcpy(gDataPath, gModulePath);
|
||||
memcpy(&gDataPath[strlen(gDataPath)], "/data", 6); //Pixel didn't use a strcat
|
||||
|
||||
//Load configuration
|
||||
CONFIG config;
|
||||
|
||||
if (!LoadConfigData(&config))
|
||||
DefaultConfigData(&config);
|
||||
|
||||
//Apply keybinds
|
||||
//Swap X and Z buttons
|
||||
if (config.attack_button_mode)
|
||||
{
|
||||
if (config.attack_button_mode == 1)
|
||||
{
|
||||
gKeyJump = KEY_X;
|
||||
gKeyShot = KEY_Z;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gKeyJump = KEY_Z;
|
||||
gKeyShot = KEY_X;
|
||||
}
|
||||
|
||||
//Swap Okay and Cancel buttons
|
||||
if (config.ok_button_mode)
|
||||
{
|
||||
if (config.ok_button_mode == 1)
|
||||
{
|
||||
gKeyOk = gKeyShot;
|
||||
gKeyCancel = gKeyJump;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gKeyOk = gKeyJump;
|
||||
gKeyCancel = gKeyShot;
|
||||
}
|
||||
|
||||
//Alternate movement keys
|
||||
if (config.move_button_mode)
|
||||
{
|
||||
if (config.move_button_mode == 1)
|
||||
{
|
||||
gKeyLeft = KEY_ALT_LEFT;
|
||||
gKeyUp = KEY_ALT_UP;
|
||||
gKeyRight = KEY_ALT_RIGHT;
|
||||
gKeyDown = KEY_ALT_DOWN;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gKeyLeft = KEY_LEFT;
|
||||
gKeyUp = KEY_UP;
|
||||
gKeyRight = KEY_RIGHT;
|
||||
gKeyDown = KEY_DOWN;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
5
src/Types.h
Normal file
5
src/Types.h
Normal file
|
@ -0,0 +1,5 @@
|
|||
#pragma once
|
||||
struct RECT
|
||||
{
|
||||
int left, right, top, bottom;
|
||||
};
|
5
src/WindowsWrapper.h
Normal file
5
src/WindowsWrapper.h
Normal file
|
@ -0,0 +1,5 @@
|
|||
#pragma once
|
||||
#include "CommonDefines.h"
|
||||
|
||||
extern char gModulePath[PATH_LENGTH];
|
||||
extern char gDataPath[PATH_LENGTH];
|
Loading…
Add table
Reference in a new issue