Merge pull request #68 from Clownacy/master
Just a bunch of stuff (accuracy improvements, code cleanup, portability improvements, etc.)
This commit is contained in:
commit
e7ad5271a4
199 changed files with 2028 additions and 1651 deletions
90
Makefile
90
Makefile
|
@ -39,7 +39,10 @@ LIBS += `sdl2-config --static-libs` `pkg-config freetype2 --libs`
|
||||||
|
|
||||||
ifeq ($(STATIC), 1)
|
ifeq ($(STATIC), 1)
|
||||||
CXXFLAGS += -static
|
CXXFLAGS += -static
|
||||||
LIBS += -lharfbuzz -lfreetype -lbz2 -lpng -lz -lgraphite2 -lRpcrt4 -lDwrite -lusp10
|
LIBS += -lharfbuzz -lfreetype -lbz2 -lpng -lz -lgraphite2
|
||||||
|
ifeq ($(WINDOWS), 1)
|
||||||
|
LIBS += -lRpcrt4 -lDwrite -lusp10
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# For an accurate result to the original's code, compile in alphabetical order
|
# For an accurate result to the original's code, compile in alphabetical order
|
||||||
|
@ -65,6 +68,7 @@ SOURCES = \
|
||||||
Ending \
|
Ending \
|
||||||
Escape \
|
Escape \
|
||||||
Fade \
|
Fade \
|
||||||
|
File \
|
||||||
Flags \
|
Flags \
|
||||||
Flash \
|
Flash \
|
||||||
Font \
|
Font \
|
||||||
|
@ -135,48 +139,48 @@ RESOURCES = \
|
||||||
BITMAP/CREDIT18.bmp \
|
BITMAP/CREDIT18.bmp \
|
||||||
CURSOR/CURSOR_IKA.bmp \
|
CURSOR/CURSOR_IKA.bmp \
|
||||||
CURSOR/CURSOR_NORMAL.bmp \
|
CURSOR/CURSOR_NORMAL.bmp \
|
||||||
ORG/ACCESS \
|
ORG/ACCESS.org \
|
||||||
ORG/ANZEN \
|
ORG/ANZEN.org \
|
||||||
ORG/BALCONY \
|
ORG/BALCONY.org \
|
||||||
ORG/BALLOS \
|
ORG/BALLOS.org \
|
||||||
ORG/BDOWN \
|
ORG/BDOWN.org \
|
||||||
ORG/CEMETERY \
|
ORG/CEMETERY.org \
|
||||||
ORG/CURLY \
|
ORG/CURLY.org \
|
||||||
ORG/DR \
|
ORG/DR.org \
|
||||||
ORG/ENDING \
|
ORG/ENDING.org \
|
||||||
ORG/ESCAPE \
|
ORG/ESCAPE.org \
|
||||||
ORG/FANFALE1 \
|
ORG/FANFALE1.org \
|
||||||
ORG/FANFALE2 \
|
ORG/FANFALE2.org \
|
||||||
ORG/FANFALE3 \
|
ORG/FANFALE3.org \
|
||||||
ORG/FIREEYE \
|
ORG/FIREEYE.org \
|
||||||
ORG/GAMEOVER \
|
ORG/GAMEOVER.org \
|
||||||
ORG/GINSUKE \
|
ORG/GINSUKE.org \
|
||||||
ORG/GRAND \
|
ORG/GRAND.org \
|
||||||
ORG/GRAVITY \
|
ORG/GRAVITY.org \
|
||||||
ORG/HELL \
|
ORG/HELL.org \
|
||||||
ORG/IRONH \
|
ORG/IRONH.org \
|
||||||
ORG/JENKA \
|
ORG/JENKA.org \
|
||||||
ORG/JENKA2 \
|
ORG/JENKA2.org \
|
||||||
ORG/KODOU \
|
ORG/KODOU.org \
|
||||||
ORG/LASTBT3 \
|
ORG/LASTBT3.org \
|
||||||
ORG/LASTBTL \
|
ORG/LASTBTL.org \
|
||||||
ORG/LASTCAVE \
|
ORG/LASTCAVE.org \
|
||||||
ORG/MARINE \
|
ORG/MARINE.org \
|
||||||
ORG/MAZE \
|
ORG/MAZE.org \
|
||||||
ORG/MDOWN2 \
|
ORG/MDOWN2.org \
|
||||||
ORG/MURA \
|
ORG/MURA.org \
|
||||||
ORG/OSIDE \
|
ORG/OSIDE.org \
|
||||||
ORG/PLANT \
|
ORG/PLANT.org \
|
||||||
ORG/QUIET \
|
ORG/QUIET.org \
|
||||||
ORG/REQUIEM \
|
ORG/REQUIEM.org \
|
||||||
ORG/TOROKO \
|
ORG/TOROKO.org \
|
||||||
ORG/VIVI \
|
ORG/VIVI.org \
|
||||||
ORG/WANPAK2 \
|
ORG/WANPAK2.org \
|
||||||
ORG/WANPAKU \
|
ORG/WANPAKU.org \
|
||||||
ORG/WEED \
|
ORG/WEED.org \
|
||||||
ORG/WHITE \
|
ORG/WHITE.org \
|
||||||
ORG/XXXX \
|
ORG/XXXX.org \
|
||||||
ORG/ZONBIE \
|
ORG/ZONBIE.org \
|
||||||
WAVE/WAVE100
|
WAVE/WAVE100
|
||||||
|
|
||||||
ifeq ($(JAPANESE), 1)
|
ifeq ($(JAPANESE), 1)
|
||||||
|
|
Binary file not shown.
499
src/ArmsItem.cpp
499
src/ArmsItem.cpp
|
@ -1,15 +1,18 @@
|
||||||
|
#include "ArmsItem.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "CommonDefines.h"
|
#include "CommonDefines.h"
|
||||||
#include "TextScr.h"
|
|
||||||
#include "ArmsItem.h"
|
|
||||||
#include "Draw.h"
|
#include "Draw.h"
|
||||||
#include "KeyControl.h"
|
|
||||||
#include "Escape.h"
|
#include "Escape.h"
|
||||||
#include "Sound.h"
|
|
||||||
#include "Main.h"
|
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
|
#include "KeyControl.h"
|
||||||
|
#include "Main.h"
|
||||||
#include "Shoot.h"
|
#include "Shoot.h"
|
||||||
|
#include "Sound.h"
|
||||||
|
#include "TextScr.h"
|
||||||
|
|
||||||
int gArmsEnergyX = 16;
|
int gArmsEnergyX = 16;
|
||||||
|
|
||||||
|
@ -18,7 +21,7 @@ ITEM gItemData[ITEM_MAX];
|
||||||
int gSelectedArms;
|
int gSelectedArms;
|
||||||
int gSelectedItem;
|
int gSelectedItem;
|
||||||
int gCampTitleY;
|
int gCampTitleY;
|
||||||
bool gCampActive;
|
BOOL gCampActive;
|
||||||
|
|
||||||
void ClearArmsData()
|
void ClearArmsData()
|
||||||
{
|
{
|
||||||
|
@ -31,106 +34,122 @@ void ClearItemData()
|
||||||
memset(gItemData, 0, sizeof(gItemData));
|
memset(gItemData, 0, sizeof(gItemData));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AddArmsData(int code, int max_num)
|
BOOL AddArmsData(long code, long max_num)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < ARMS_MAX; i++)
|
int i = 0;
|
||||||
{
|
for (;i < ARMS_MAX;)
|
||||||
if (gArmsData[i].code == code || !gArmsData[i].code)
|
|
||||||
{
|
|
||||||
if (!gArmsData[i].code)
|
|
||||||
{
|
|
||||||
memset(&gArmsData[i], 0, sizeof(ARMS));
|
|
||||||
gArmsData[i].level = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
gArmsData[i].code = code;
|
|
||||||
gArmsData[i].max_num += max_num;
|
|
||||||
gArmsData[i].num += max_num;
|
|
||||||
if (gArmsData[i].num > gArmsData[i].max_num)
|
|
||||||
gArmsData[i].num = gArmsData[i].max_num;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SubArmsData(int code)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < ARMS_MAX; i++)
|
|
||||||
{
|
{
|
||||||
if (gArmsData[i].code == code)
|
if (gArmsData[i].code == code)
|
||||||
{
|
break;
|
||||||
//Shift all arms from the right to the left
|
|
||||||
int ia;
|
|
||||||
for (ia = i + 1; ia < ARMS_MAX; ++ia)
|
|
||||||
{
|
|
||||||
gArmsData[ia - 1].code = gArmsData[ia].code;
|
|
||||||
gArmsData[ia - 1].level = gArmsData[ia].level;
|
|
||||||
gArmsData[ia - 1].exp = gArmsData[ia].exp;
|
|
||||||
gArmsData[ia - 1].max_num = gArmsData[ia].max_num;
|
|
||||||
gArmsData[ia - 1].num = gArmsData[ia].num;
|
|
||||||
}
|
|
||||||
|
|
||||||
gArmsData[ia - 1].code = 0;
|
if (gArmsData[i].code == 0)
|
||||||
gSelectedArms = 0;
|
break;
|
||||||
return true;
|
|
||||||
}
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
if (i == ARMS_MAX)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (gArmsData[i].code == 0)
|
||||||
|
{
|
||||||
|
memset(&gArmsData[i], 0, sizeof(ARMS));
|
||||||
|
gArmsData[i].level = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
gArmsData[i].code = code;
|
||||||
|
gArmsData[i].max_num += max_num;
|
||||||
|
gArmsData[i].num += max_num;
|
||||||
|
|
||||||
|
if (gArmsData[i].num > gArmsData[i].max_num)
|
||||||
|
gArmsData[i].num = gArmsData[i].max_num;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TradeArms(int code1, int code2, int max_num)
|
BOOL SubArmsData(long code)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < ARMS_MAX; i++)
|
int i = 0;
|
||||||
|
for (;i < ARMS_MAX; ++i)
|
||||||
|
if (gArmsData[i].code == code)
|
||||||
|
break;
|
||||||
|
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
if (i == ARMS_MAX)
|
||||||
|
#else
|
||||||
|
if (i == ITEM_MAX) // Oops
|
||||||
|
#endif
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
//Shift all arms from the right to the left
|
||||||
|
for (i += 1; i < ARMS_MAX; ++i)
|
||||||
|
gArmsData[i - 1] = gArmsData[i];
|
||||||
|
|
||||||
|
gArmsData[i - 1].code = 0;
|
||||||
|
gSelectedArms = 0;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL TradeArms(long code1, long code2, long max_num)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
for (;i < ARMS_MAX;)
|
||||||
{
|
{
|
||||||
if (gArmsData[i].code == code1)
|
if (gArmsData[i].code == code1)
|
||||||
{
|
break;
|
||||||
gArmsData[i].level = 1;
|
|
||||||
gArmsData[i].code = code2;
|
++i;
|
||||||
gArmsData[i].max_num += max_num;
|
|
||||||
gArmsData[i].num += max_num;
|
|
||||||
gArmsData[i].exp = 0;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
if (i == ARMS_MAX)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
gArmsData[i].level = 1;
|
||||||
|
gArmsData[i].code = code2;
|
||||||
|
gArmsData[i].max_num += max_num;
|
||||||
|
gArmsData[i].num += max_num;
|
||||||
|
gArmsData[i].exp = 0;
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AddItemData(int code)
|
BOOL AddItemData(long code)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < ITEM_MAX; i++)
|
int i = 0;
|
||||||
{
|
for (;i < ITEM_MAX;)
|
||||||
if (gItemData[i].code == code || !gItemData[i].code)
|
|
||||||
{
|
|
||||||
gItemData[i].code = code;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SubItemData(int code)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < ITEM_MAX; i++)
|
|
||||||
{
|
{
|
||||||
if (gItemData[i].code == code)
|
if (gItemData[i].code == code)
|
||||||
{
|
break;
|
||||||
//Shift all items from the right to the left
|
|
||||||
int ia;
|
|
||||||
for (ia = i + 1; ia < ITEM_MAX; ++ia)
|
|
||||||
gItemData[ia - 1].code = gItemData[ia].code;
|
|
||||||
|
|
||||||
gItemData[ia - 1].code = 0;
|
if (gItemData[i].code == 0)
|
||||||
gSelectedItem = 0;
|
break;
|
||||||
return true;
|
|
||||||
}
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
if (i == ITEM_MAX)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
gItemData[i].code = code;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL SubItemData(long code)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
for (;i < ITEM_MAX; ++i)
|
||||||
|
if (gItemData[i].code == code)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (i == ITEM_MAX)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
//Shift all items from the right to the left
|
||||||
|
for (i += 1; i < ITEM_MAX; ++i)
|
||||||
|
gItemData[i - 1] = gItemData[i];
|
||||||
|
|
||||||
|
gItemData[i - 1].code = 0;
|
||||||
|
gSelectedItem = 0;
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveCampCursor()
|
void MoveCampCursor()
|
||||||
|
@ -142,104 +161,107 @@ void MoveCampCursor()
|
||||||
while ( gItemData[item_num].code != 0 )
|
while ( gItemData[item_num].code != 0 )
|
||||||
++item_num;
|
++item_num;
|
||||||
|
|
||||||
if (arms_num || item_num)
|
if (arms_num == 0 && item_num == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
BOOL bChange = FALSE;
|
||||||
|
if (gCampActive == FALSE)
|
||||||
{
|
{
|
||||||
bool bChange = false;
|
if (gKeyTrg & gKeyLeft)
|
||||||
if (gCampActive)
|
|
||||||
{
|
{
|
||||||
if (gKeyTrg & gKeyLeft)
|
--gSelectedArms;
|
||||||
{
|
bChange = TRUE;
|
||||||
if (gSelectedItem % 6)
|
}
|
||||||
--gSelectedItem;
|
if (gKeyTrg & gKeyRight)
|
||||||
else
|
{
|
||||||
gSelectedItem += 5;
|
++gSelectedArms;
|
||||||
|
bChange = TRUE;
|
||||||
|
}
|
||||||
|
if ((gKeyDown | gKeyUp) & gKeyTrg)
|
||||||
|
{
|
||||||
|
if (item_num)
|
||||||
|
gCampActive = TRUE;
|
||||||
|
bChange = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
bChange = true;
|
if (gSelectedArms < 0)
|
||||||
}
|
gSelectedArms = arms_num - 1;
|
||||||
|
if (gSelectedArms > arms_num - 1)
|
||||||
|
gSelectedArms = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (gKeyTrg & gKeyLeft)
|
||||||
|
{
|
||||||
|
if (gSelectedItem % 6 == 0)
|
||||||
|
gSelectedItem += 5;
|
||||||
|
else
|
||||||
|
--gSelectedItem;
|
||||||
|
|
||||||
if (gKeyTrg & gKeyRight)
|
bChange = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gKeyTrg & gKeyRight)
|
||||||
|
{
|
||||||
|
if (gSelectedItem == item_num - 1)
|
||||||
|
gSelectedItem = 6 * (gSelectedItem / 6);
|
||||||
|
else
|
||||||
{
|
{
|
||||||
if (item_num - 1 == gSelectedItem)
|
if (gSelectedItem % 6 == 5)
|
||||||
gSelectedItem = 6 * (gSelectedItem / 6);
|
|
||||||
else if (gSelectedItem % 6 == 5)
|
|
||||||
gSelectedItem -= 5;
|
gSelectedItem -= 5;
|
||||||
else
|
else
|
||||||
++gSelectedItem;
|
++gSelectedItem;
|
||||||
|
|
||||||
bChange = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gKeyTrg & gKeyUp)
|
bChange = TRUE;
|
||||||
{
|
}
|
||||||
if (gSelectedItem + 5 > 10)
|
|
||||||
gSelectedItem -= 6;
|
|
||||||
else
|
|
||||||
gCampActive = false;
|
|
||||||
|
|
||||||
bChange = true;
|
if (gKeyTrg & gKeyUp)
|
||||||
}
|
{
|
||||||
|
if (gSelectedItem / 6 == 0)
|
||||||
|
gCampActive = FALSE;
|
||||||
|
else
|
||||||
|
gSelectedItem -= 6;
|
||||||
|
|
||||||
if ( gKeyTrg & gKeyDown )
|
bChange = TRUE;
|
||||||
{
|
}
|
||||||
if ( gSelectedItem / 6 == (item_num - 1) / 6 )
|
|
||||||
gCampActive = false;
|
|
||||||
else
|
|
||||||
gSelectedItem += 6;
|
|
||||||
|
|
||||||
bChange = true;
|
if ( gKeyTrg & gKeyDown )
|
||||||
}
|
{
|
||||||
|
if ( gSelectedItem / 6 == (item_num - 1) / 6 )
|
||||||
|
gCampActive = FALSE;
|
||||||
|
else
|
||||||
|
gSelectedItem += 6;
|
||||||
|
|
||||||
if (gSelectedItem >= item_num)
|
bChange = TRUE;
|
||||||
gSelectedItem = item_num - 1;
|
}
|
||||||
|
|
||||||
if (gCampActive && gKeyTrg & gKeyOk)
|
if (gSelectedItem >= item_num)
|
||||||
StartTextScript(gItemData[gSelectedItem].code + 6000);
|
gSelectedItem = item_num - 1;
|
||||||
|
|
||||||
|
if (gCampActive && gKeyTrg & gKeyOk)
|
||||||
|
StartTextScript(gItemData[gSelectedItem].code + 6000);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bChange)
|
||||||
|
{
|
||||||
|
if (gCampActive == FALSE)
|
||||||
|
{
|
||||||
|
PlaySoundObject(4, 1);
|
||||||
|
|
||||||
|
if (arms_num)
|
||||||
|
StartTextScript(gArmsData[gSelectedArms].code + 1000);
|
||||||
|
else
|
||||||
|
StartTextScript(1000);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gKeyTrg & gKeyLeft)
|
PlaySoundObject(1, 1);
|
||||||
{
|
|
||||||
--gSelectedArms;
|
|
||||||
bChange = true;
|
|
||||||
}
|
|
||||||
if (gKeyTrg & gKeyRight)
|
|
||||||
{
|
|
||||||
++gSelectedArms;
|
|
||||||
bChange = true;
|
|
||||||
}
|
|
||||||
if ((gKeyDown | gKeyUp) & gKeyTrg)
|
|
||||||
{
|
|
||||||
if (item_num)
|
|
||||||
gCampActive = true;
|
|
||||||
bChange = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gSelectedArms < 0)
|
if (item_num)
|
||||||
gSelectedArms = arms_num - 1;
|
StartTextScript(gItemData[gSelectedItem].code + 5000);
|
||||||
if (arms_num - 1 < gSelectedArms)
|
|
||||||
gSelectedArms = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bChange)
|
|
||||||
{
|
|
||||||
if (gCampActive)
|
|
||||||
{
|
|
||||||
PlaySoundObject(1, 1);
|
|
||||||
|
|
||||||
if (item_num)
|
|
||||||
StartTextScript(gItemData[gSelectedItem].code + 5000);
|
|
||||||
else
|
|
||||||
StartTextScript(5000);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
StartTextScript(5000);
|
||||||
PlaySoundObject(4, 1);
|
|
||||||
|
|
||||||
if (arms_num)
|
|
||||||
StartTextScript(gArmsData[gSelectedArms].code + 1000);
|
|
||||||
else
|
|
||||||
StartTextScript(1000);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -251,12 +273,8 @@ void PutCampObject()
|
||||||
RECT rcNone = {80, 48, 96, 56};
|
RECT rcNone = {80, 48, 96, 56};
|
||||||
RECT rcLv = {80, 80, 96, 88};
|
RECT rcLv = {80, 80, 96, 88};
|
||||||
RECT rcView = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
|
RECT rcView = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
|
||||||
RECT rcCur1[2];
|
RECT rcCur1[2] = {{0, 88, 40, 128}, {40, 88, 80, 128}};
|
||||||
RECT rcCur2[2];
|
RECT rcCur2[2] = {{80, 88, 112, 104}, {80, 104, 112, 120}};
|
||||||
rcCur1[0] = {0, 88, 40, 128};
|
|
||||||
rcCur1[1] = {40, 88, 80, 128};
|
|
||||||
rcCur2[0] = {80, 88, 112, 104};
|
|
||||||
rcCur2[1] = {80, 104, 112, 120};
|
|
||||||
RECT rcTitle1 = {80, 48, 144, 56};
|
RECT rcTitle1 = {80, 48, 144, 56};
|
||||||
RECT rcTitle2 = {80, 56, 144, 64};
|
RECT rcTitle2 = {80, 56, 144, 64};
|
||||||
RECT rcBoxTop = {0, 0, 244, 8};
|
RECT rcBoxTop = {0, 0, 244, 8};
|
||||||
|
@ -265,40 +283,43 @@ void PutCampObject()
|
||||||
|
|
||||||
//Draw box
|
//Draw box
|
||||||
int y;
|
int y;
|
||||||
PutBitmap3(&rcView, (WINDOW_WIDTH - 244) / 2, (WINDOW_HEIGHT - 224) / 2, &rcBoxTop, 26);
|
PutBitmap3(&rcView, (WINDOW_WIDTH - 244) / 2, (WINDOW_HEIGHT - 224) / 2, &rcBoxTop, SURFACE_ID_TEXT_BOX);
|
||||||
for (y = 1; y < 18; y++)
|
for (y = 1; y < 18; y++)
|
||||||
PutBitmap3(&rcView, (WINDOW_WIDTH - 244) / 2, ((WINDOW_HEIGHT - 240) / 2) + (8 * (y + 1)), &rcBoxBody, 26);
|
PutBitmap3(&rcView, (WINDOW_WIDTH - 244) / 2, ((WINDOW_HEIGHT - 240) / 2) + (8 * (y + 1)), &rcBoxBody, SURFACE_ID_TEXT_BOX);
|
||||||
PutBitmap3(&rcView, (WINDOW_WIDTH - 244) / 2, ((WINDOW_HEIGHT - 240) / 2) + (8 * (y + 1)), &rcBoxBottom, 26);
|
PutBitmap3(&rcView, (WINDOW_WIDTH - 244) / 2, ((WINDOW_HEIGHT - 240) / 2) + (8 * (y + 1)), &rcBoxBottom, SURFACE_ID_TEXT_BOX);
|
||||||
|
|
||||||
//Move titles
|
//Move titles
|
||||||
if (gCampTitleY > (WINDOW_HEIGHT - 208) / 2)
|
if (gCampTitleY > (WINDOW_HEIGHT - 208) / 2)
|
||||||
--gCampTitleY;
|
--gCampTitleY;
|
||||||
|
|
||||||
//Draw titles
|
//Draw titles
|
||||||
PutBitmap3(&rcView, (WINDOW_WIDTH - 224) / 2, gCampTitleY, &rcTitle1, 26);
|
PutBitmap3(&rcView, (WINDOW_WIDTH - 224) / 2, gCampTitleY, &rcTitle1, SURFACE_ID_TEXT_BOX);
|
||||||
PutBitmap3(&rcView, (WINDOW_WIDTH - 224) / 2, gCampTitleY + 52, &rcTitle2, 26);
|
PutBitmap3(&rcView, (WINDOW_WIDTH - 224) / 2, gCampTitleY + 52, &rcTitle2, SURFACE_ID_TEXT_BOX);
|
||||||
|
|
||||||
//Draw arms cursor
|
//Draw arms cursor
|
||||||
static int flash;
|
static unsigned int flash;
|
||||||
++flash;
|
++flash;
|
||||||
|
|
||||||
if (gCampActive)
|
if (gCampActive == FALSE)
|
||||||
PutBitmap3(&rcView, 40 * gSelectedArms + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT / 2) - 96, &rcCur1[1], 26);
|
PutBitmap3(&rcView, 40 * gSelectedArms + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT / 2) - 96, &rcCur1[(flash / 2) % 2], SURFACE_ID_TEXT_BOX);
|
||||||
else
|
else
|
||||||
PutBitmap3(&rcView, 40 * gSelectedArms + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT / 2) - 96, &rcCur1[(flash >> 1) & 1], 26);
|
PutBitmap3(&rcView, 40 * gSelectedArms + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT / 2) - 96, &rcCur1[1], SURFACE_ID_TEXT_BOX);
|
||||||
|
|
||||||
//Draw arms
|
//Draw arms
|
||||||
for (int i = 0; i < ARMS_MAX && gArmsData[i].code; i++)
|
for (int i = 0; i < ARMS_MAX; i++)
|
||||||
{
|
{
|
||||||
|
if (gArmsData[i].code == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
RECT rcArms;
|
RECT rcArms;
|
||||||
rcArms.left = 16 * (gArmsData[i].code % 16);
|
rcArms.left = 16 * (gArmsData[i].code % 16);
|
||||||
rcArms.right = rcArms.left + 16;
|
rcArms.right = rcArms.left + 16;
|
||||||
rcArms.top = 16 * (gArmsData[i].code / 16);
|
rcArms.top = 16 * (gArmsData[i].code / 16);
|
||||||
rcArms.bottom = rcArms.top + 16;
|
rcArms.bottom = rcArms.top + 16;
|
||||||
|
|
||||||
PutBitmap3(&rcView, 40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 192) / 2, &rcArms, 12);
|
PutBitmap3(&rcView, 40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 192) / 2, &rcArms, SURFACE_ID_ARMS_IMAGE);
|
||||||
PutBitmap3(&rcView, 40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 128) / 2, &rcPer, 26);
|
PutBitmap3(&rcView, 40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 128) / 2, &rcPer, SURFACE_ID_TEXT_BOX);
|
||||||
PutBitmap3(&rcView, 40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 160) / 2, &rcLv, 26);
|
PutBitmap3(&rcView, 40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 160) / 2, &rcLv, SURFACE_ID_TEXT_BOX);
|
||||||
PutNumber4(40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 160) / 2, gArmsData[i].level, 0);
|
PutNumber4(40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 160) / 2, gArmsData[i].level, 0);
|
||||||
|
|
||||||
//Draw ammo
|
//Draw ammo
|
||||||
|
@ -309,26 +330,29 @@ void PutCampObject()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PutBitmap3(&rcView, 40 * i + (WINDOW_WIDTH - 192) / 2, (WINDOW_HEIGHT - 144) / 2, &rcNone, 26);
|
PutBitmap3(&rcView, 40 * i + (WINDOW_WIDTH - 192) / 2, (WINDOW_HEIGHT - 144) / 2, &rcNone, SURFACE_ID_TEXT_BOX);
|
||||||
PutBitmap3(&rcView, 40 * i + (WINDOW_WIDTH - 192) / 2, (WINDOW_HEIGHT - 128) / 2, &rcNone, 26);
|
PutBitmap3(&rcView, 40 * i + (WINDOW_WIDTH - 192) / 2, (WINDOW_HEIGHT - 128) / 2, &rcNone, SURFACE_ID_TEXT_BOX);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Draw items cursor
|
//Draw items cursor
|
||||||
if (gCampActive)
|
if (gCampActive == TRUE)
|
||||||
PutBitmap3(&rcView, 32 * (gSelectedItem % 6) + (WINDOW_WIDTH - 224) / 2, 16 * (gSelectedItem / 6) + (WINDOW_HEIGHT - 88) / 2, &rcCur2[(flash >> 1) & 1], 26);
|
PutBitmap3(&rcView, 32 * (gSelectedItem % 6) + (WINDOW_WIDTH - 224) / 2, 16 * (gSelectedItem / 6) + (WINDOW_HEIGHT - 88) / 2, &rcCur2[(flash / 2) % 2], SURFACE_ID_TEXT_BOX);
|
||||||
else
|
else
|
||||||
PutBitmap3(&rcView, 32 * (gSelectedItem % 6) + (WINDOW_WIDTH - 224) / 2, 16 * (gSelectedItem / 6) + (WINDOW_HEIGHT - 88) / 2, &rcCur2[1], 26);
|
PutBitmap3(&rcView, 32 * (gSelectedItem % 6) + (WINDOW_WIDTH - 224) / 2, 16 * (gSelectedItem / 6) + (WINDOW_HEIGHT - 88) / 2, &rcCur2[1], SURFACE_ID_TEXT_BOX);
|
||||||
|
|
||||||
for (int i = 0; i < ITEM_MAX && gItemData[i].code; i++)
|
for (int i = 0; i < ITEM_MAX; i++)
|
||||||
{
|
{
|
||||||
|
if (gItemData[i].code == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
RECT rcItem;
|
RECT rcItem;
|
||||||
rcItem.left = 32 * (gItemData[i].code % 8);
|
rcItem.left = 32 * (gItemData[i].code % 8);
|
||||||
rcItem.right = rcItem.left + 32;
|
rcItem.right = rcItem.left + 32;
|
||||||
rcItem.top = 16 * (gItemData[i].code / 8);
|
rcItem.top = 16 * (gItemData[i].code / 8);
|
||||||
rcItem.bottom = rcItem.top + 16;
|
rcItem.bottom = rcItem.top + 16;
|
||||||
|
|
||||||
PutBitmap3(&rcView, 32 * (i % 6) + (WINDOW_WIDTH - 224) / 2, 16 * (i / 6) + (WINDOW_HEIGHT - 88) / 2, &rcItem, 8);
|
PutBitmap3(&rcView, 32 * (i % 6) + (WINDOW_WIDTH - 224) / 2, 16 * (i / 6) + (WINDOW_HEIGHT - 88) / 2, &rcItem, SURFACE_ID_ITEM_IMAGE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -340,24 +364,23 @@ int CampLoop()
|
||||||
char old_script_path[PATH_LENGTH];
|
char old_script_path[PATH_LENGTH];
|
||||||
GetTextScriptPath(old_script_path);
|
GetTextScriptPath(old_script_path);
|
||||||
|
|
||||||
char name[13];
|
LoadTextScript2("ArmsItem.tsc");
|
||||||
strcpy(name, "ArmsItem.tsc");
|
|
||||||
LoadTextScript2(name);
|
|
||||||
|
|
||||||
gCampTitleY = (WINDOW_HEIGHT - 192) / 2;
|
gCampTitleY = (WINDOW_HEIGHT - 192) / 2;
|
||||||
gCampActive = 0;
|
gCampActive = 0;
|
||||||
gSelectedItem = 0;
|
gSelectedItem = 0;
|
||||||
|
|
||||||
//Run script
|
//Run script
|
||||||
int arms_num;
|
int arms_num = 0;
|
||||||
for (arms_num = 0; gArmsData[arms_num].code != 0; arms_num++);
|
for (;gArmsData[arms_num].code != 0;)
|
||||||
|
++arms_num;
|
||||||
|
|
||||||
if (arms_num)
|
if (arms_num)
|
||||||
StartTextScript(gArmsData[gSelectedArms].code + 1000);
|
StartTextScript(gArmsData[gSelectedArms].code + 1000);
|
||||||
else
|
else
|
||||||
StartTextScript(gItemData[gSelectedItem].code + 5000);
|
StartTextScript(gItemData[gSelectedItem].code + 5000);
|
||||||
|
|
||||||
while (true)
|
for (;;)
|
||||||
{
|
{
|
||||||
GetTrg();
|
GetTrg();
|
||||||
|
|
||||||
|
@ -383,90 +406,110 @@ int CampLoop()
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
PutBitmap4(&rcView, 0, 0, &rcView, 10);
|
PutBitmap4(&rcView, 0, 0, &rcView, SURFACE_ID_SCREEN_GRAB);
|
||||||
PutCampObject();
|
PutCampObject();
|
||||||
PutTextScript();
|
PutTextScript();
|
||||||
PutFramePerSecound();
|
PutFramePerSecound();
|
||||||
|
|
||||||
if (!gCampActive && (gKeyItem | gKeyCancel | gKeyOk) & gKeyTrg)
|
if (gCampActive)
|
||||||
break;
|
{
|
||||||
else if (g_GameFlags & 2 && (gKeyItem | gKeyCancel) & gKeyTrg)
|
if (g_GameFlags & 2 && (gKeyCancel | gKeyItem) & gKeyTrg)
|
||||||
break;
|
{
|
||||||
|
StopTextScript();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((gKeyCancel | gKeyOk | gKeyItem) & gKeyTrg)
|
||||||
|
{
|
||||||
|
StopTextScript();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!Flip_SystemTask())
|
if (!Flip_SystemTask())
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Resume original script
|
//Resume original script
|
||||||
StopTextScript();
|
|
||||||
LoadTextScript_Stage(old_script_path);
|
LoadTextScript_Stage(old_script_path);
|
||||||
gArmsEnergyX = 32;
|
gArmsEnergyX = 32;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CheckItem(int a)
|
BOOL CheckItem(long a)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < ITEM_MAX; i++)
|
for (int i = 0; i < ITEM_MAX; i++)
|
||||||
{
|
{
|
||||||
if (gItemData[i].code == a)
|
if (gItemData[i].code == a)
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CheckArms(int a)
|
BOOL CheckArms(long a)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < ARMS_MAX; i++)
|
for (int i = 0; i < ARMS_MAX; i++)
|
||||||
{
|
{
|
||||||
if (gArmsData[i].code == a)
|
if (gArmsData[i].code == a)
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UseArmsEnergy(int num)
|
BOOL UseArmsEnergy(long num)
|
||||||
{
|
{
|
||||||
if (!gArmsData[gSelectedArms].max_num)
|
if (!gArmsData[gSelectedArms].max_num)
|
||||||
return true;
|
return TRUE;
|
||||||
if (!gArmsData[gSelectedArms].num)
|
if (!gArmsData[gSelectedArms].num)
|
||||||
return false;
|
return FALSE;
|
||||||
gArmsData[gSelectedArms].num -= num;
|
gArmsData[gSelectedArms].num -= num;
|
||||||
if (gArmsData[gSelectedArms].num < 0)
|
if (gArmsData[gSelectedArms].num < 0)
|
||||||
gArmsData[gSelectedArms].num = 0;
|
gArmsData[gSelectedArms].num = 0;
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChargeArmsEnergy(int num)
|
BOOL ChargeArmsEnergy(long num)
|
||||||
{
|
{
|
||||||
gArmsData[gSelectedArms].num += num;
|
gArmsData[gSelectedArms].num += num;
|
||||||
if (gArmsData[gSelectedArms].num > gArmsData[gSelectedArms].max_num)
|
if (gArmsData[gSelectedArms].num > gArmsData[gSelectedArms].max_num)
|
||||||
gArmsData[gSelectedArms].num = gArmsData[gSelectedArms].max_num;
|
gArmsData[gSelectedArms].num = gArmsData[gSelectedArms].max_num;
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FullArmsEnergy()
|
void FullArmsEnergy()
|
||||||
{
|
{
|
||||||
for (int a = 0; a < ARMS_MAX; a++)
|
for (int a = 0; a < ARMS_MAX; a++)
|
||||||
{
|
{
|
||||||
if (gArmsData[a].code)
|
if (gArmsData[a].code == 0)
|
||||||
gArmsData[a].num = gArmsData[a].max_num;
|
continue;
|
||||||
|
|
||||||
|
gArmsData[a].num = gArmsData[a].max_num;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int RotationArms()
|
int RotationArms()
|
||||||
{
|
{
|
||||||
int arms_num;
|
int arms_num = 0;
|
||||||
for ( arms_num = 0; gArmsData[arms_num].code != 0; arms_num++);
|
for (;gArmsData[arms_num].code != 0;)
|
||||||
if (!arms_num)
|
++arms_num;
|
||||||
|
|
||||||
|
if (arms_num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ResetSpurCharge();
|
ResetSpurCharge();
|
||||||
|
|
||||||
++gSelectedArms;
|
++gSelectedArms;
|
||||||
while (gSelectedArms < arms_num && !gArmsData[gSelectedArms].code)
|
while (gSelectedArms < arms_num)
|
||||||
|
{
|
||||||
|
if (gArmsData[gSelectedArms].code)
|
||||||
|
break;
|
||||||
|
|
||||||
++gSelectedArms;
|
++gSelectedArms;
|
||||||
|
}
|
||||||
|
|
||||||
if (gSelectedArms == arms_num)
|
if (gSelectedArms == arms_num)
|
||||||
gSelectedArms = 0;
|
gSelectedArms = 0;
|
||||||
|
@ -479,17 +522,25 @@ int RotationArms()
|
||||||
|
|
||||||
int RotationArmsRev()
|
int RotationArmsRev()
|
||||||
{
|
{
|
||||||
int arms_num;
|
int arms_num = 0;
|
||||||
for (arms_num = 0; gArmsData[arms_num].code != 0; arms_num++);
|
for (;gArmsData[arms_num].code != 0;)
|
||||||
if (!arms_num)
|
++arms_num;
|
||||||
|
|
||||||
|
if (arms_num == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ResetSpurCharge();
|
ResetSpurCharge();
|
||||||
|
|
||||||
if (--gSelectedArms < 0)
|
if (--gSelectedArms < 0)
|
||||||
gSelectedArms = arms_num - 1;
|
gSelectedArms = arms_num - 1;
|
||||||
while (gSelectedArms < arms_num && !gArmsData[gSelectedArms].code)
|
|
||||||
|
while (gSelectedArms < arms_num)
|
||||||
|
{
|
||||||
|
if (gArmsData[gSelectedArms].code)
|
||||||
|
break;
|
||||||
|
|
||||||
--gSelectedArms;
|
--gSelectedArms;
|
||||||
|
}
|
||||||
|
|
||||||
gArmsEnergyX = 0;
|
gArmsEnergyX = 0;
|
||||||
PlaySoundObject(4, 1);
|
PlaySoundObject(4, 1);
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
struct ARMS
|
struct ARMS
|
||||||
{
|
{
|
||||||
int code;
|
int code;
|
||||||
|
@ -26,20 +29,20 @@ extern ITEM gItemData[ITEM_MAX];
|
||||||
extern int gSelectedArms;
|
extern int gSelectedArms;
|
||||||
extern int gSelectedItem;
|
extern int gSelectedItem;
|
||||||
extern int gCampTitleY;
|
extern int gCampTitleY;
|
||||||
extern bool gCampActive;
|
extern BOOL gCampActive;
|
||||||
|
|
||||||
void ClearArmsData();
|
void ClearArmsData();
|
||||||
void ClearItemData();
|
void ClearItemData();
|
||||||
bool AddArmsData(int code, int max_num);
|
BOOL AddArmsData(long code, long max_num);
|
||||||
bool SubArmsData(int code);
|
BOOL SubArmsData(long code);
|
||||||
bool TradeArms(int code1, int code2, int max_num);
|
BOOL TradeArms(long code1, long code2, long max_num);
|
||||||
bool AddItemData(int code);
|
BOOL AddItemData(long code);
|
||||||
bool SubItemData(int code);
|
BOOL SubItemData(long code);
|
||||||
int CampLoop();
|
int CampLoop();
|
||||||
bool CheckItem(int a);
|
BOOL CheckItem(long a);
|
||||||
bool CheckArms(int a);
|
BOOL CheckArms(long a);
|
||||||
bool UseArmsEnergy(int num);
|
BOOL UseArmsEnergy(long num);
|
||||||
bool ChargeArmsEnergy(int num);
|
BOOL ChargeArmsEnergy(long num);
|
||||||
void FullArmsEnergy();
|
void FullArmsEnergy();
|
||||||
int RotationArms();
|
int RotationArms();
|
||||||
int RotationArmsRev();
|
int RotationArmsRev();
|
||||||
|
|
110
src/Back.cpp
110
src/Back.cpp
|
@ -1,51 +1,89 @@
|
||||||
#include <SDL_rwops.h>
|
#include "Back.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Tags.h"
|
#include "Draw.h"
|
||||||
#include "Back.h"
|
#include "File.h"
|
||||||
#include "Frame.h"
|
#include "Frame.h"
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "Draw.h"
|
|
||||||
#include "Stage.h"
|
|
||||||
#include "Map.h"
|
#include "Map.h"
|
||||||
|
#include "Stage.h"
|
||||||
|
#include "Tags.h"
|
||||||
|
|
||||||
BACK gBack;
|
BACK gBack;
|
||||||
int gWaterY;
|
int gWaterY;
|
||||||
|
|
||||||
bool InitBack(char *fName, int type)
|
BOOL InitBack(const char *fName, int type)
|
||||||
{
|
{
|
||||||
//Get width and height
|
//Get width and height
|
||||||
char path[PATH_LENGTH];
|
char path[PATH_LENGTH];
|
||||||
sprintf(path, "%s/%s.pbm", gDataPath, fName);
|
sprintf(path, "%s/%s.pbm", gDataPath, fName);
|
||||||
|
|
||||||
SDL_Surface *temp = SDL_LoadBMP(path);
|
FILE *fp = fopen(path, "rb");
|
||||||
if (!temp)
|
if (fp == NULL)
|
||||||
return false;
|
{
|
||||||
|
sprintf(path, "%s/%s.bmp", gDataPath, fName);
|
||||||
|
fp = fopen(path, "rb");
|
||||||
|
if (fp == NULL)
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
gBack.partsW = temp->w;
|
#ifdef FIX_BUGS // TODO: Maybe we need a 'BETTER_PORTABILITY' flag
|
||||||
gBack.partsH = temp->h;
|
if (fgetc(fp) != 'B' || fgetc(fp) != 'M')
|
||||||
|
{
|
||||||
|
fclose(fp);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
SDL_FreeSurface(temp);
|
fseek(fp, 18, SEEK_SET);
|
||||||
|
|
||||||
|
gBack.partsW = File_ReadLE32(fp);
|
||||||
|
gBack.partsH = File_ReadLE32(fp);
|
||||||
|
fclose(fp);
|
||||||
|
#else
|
||||||
|
// This is ridiculously platform-dependant:
|
||||||
|
// It should break on big-endian CPUs, and platforms
|
||||||
|
// where short isn't 16-bit and long isn't 32-bit.
|
||||||
|
short bmp_header_buffer[7];
|
||||||
|
long bmp_header_buffer2[10];
|
||||||
|
|
||||||
|
fread(bmp_header_buffer, 14, 1, fp);
|
||||||
|
|
||||||
|
// Check if this is a valid bitmap file
|
||||||
|
if (bmp_header_buffer[0] != 0x4D42) // 'MB' (we use hex to prevent a compiler warning)
|
||||||
|
return FALSE; // The original game forgets to close fp
|
||||||
|
|
||||||
|
fread(bmp_header_buffer2, 40, 1, fp);
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
gBack.partsW = bmp_header_buffer2[1];
|
||||||
|
gBack.partsH = bmp_header_buffer2[2];
|
||||||
|
#endif
|
||||||
|
|
||||||
//Set background stuff and load texture
|
//Set background stuff and load texture
|
||||||
gBack.flag = 1;
|
gBack.flag = 1;
|
||||||
if (!ReloadBitmap_File(fName, SURFACE_ID_LEVEL_BACKGROUND))
|
if (!ReloadBitmap_File(fName, SURFACE_ID_LEVEL_BACKGROUND))
|
||||||
return false;
|
return FALSE;
|
||||||
gBack.type = type;
|
gBack.type = type;
|
||||||
gWaterY = 0x1E0000;
|
gWaterY = 0x1E0000;
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActBack()
|
void ActBack()
|
||||||
{
|
{
|
||||||
if (gBack.type == 5)
|
switch (gBack.type)
|
||||||
{
|
{
|
||||||
gBack.fx += 0xC00;
|
case 5:
|
||||||
}
|
gBack.fx += 0xC00;
|
||||||
else if (gBack.type >= 5 && gBack.type <= 7)
|
break;
|
||||||
{
|
|
||||||
++gBack.fx;
|
case 6:
|
||||||
gBack.fx %= 640;
|
case 7:
|
||||||
|
++gBack.fx;
|
||||||
|
gBack.fx %= 640;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,35 +198,35 @@ void PutBack(int fx, int fy)
|
||||||
|
|
||||||
void PutFront(int fx, int fy)
|
void PutFront(int fx, int fy)
|
||||||
{
|
{
|
||||||
RECT rcWater[2];
|
RECT rcWater[2] = {{0, 0, 32, 16}, {0, 16, 32, 48}};
|
||||||
rcWater[0] = {0, 0, 32, 16};
|
|
||||||
rcWater[1] = {0, 16, 32, 48};
|
|
||||||
|
|
||||||
if (gBack.type == 3)
|
switch (gBack.type)
|
||||||
{
|
{
|
||||||
int x_1 = fx / 0x4000;
|
case 3:
|
||||||
int x_2 = x_1 + (((WINDOW_WIDTH + 31) >> 5) + 1);
|
int x_1 = fx / 0x4000;
|
||||||
int y_1 = 0;
|
int x_2 = x_1 + (((WINDOW_WIDTH + 31) >> 5) + 1);
|
||||||
int y_2 = y_1 + 32;
|
int y_1 = 0;
|
||||||
|
int y_2 = y_1 + 32;
|
||||||
|
|
||||||
for (int y = y_1; y < y_2; y++)
|
for (int y = y_1; y < y_2; y++)
|
||||||
{
|
|
||||||
int ypos = (y << 14) / 0x200 - fy / 0x200 + gWaterY / 0x200;
|
|
||||||
|
|
||||||
if (ypos >= -32)
|
|
||||||
{
|
{
|
||||||
|
int ypos = (y * 0x20 * 0x200) / 0x200 - fy / 0x200 + gWaterY / 0x200;
|
||||||
|
|
||||||
|
if (ypos < -32)
|
||||||
|
break;
|
||||||
|
|
||||||
if (ypos > WINDOW_HEIGHT)
|
if (ypos > WINDOW_HEIGHT)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
for (int x = x_1; x < x_2; x++)
|
for (int x = x_1; x < x_2; x++)
|
||||||
{
|
{
|
||||||
int xpos = (x << 14) / 0x200 - fx / 0x200;
|
int xpos = (x * 0x20 * 0x200) / 0x200 - fx / 0x200;
|
||||||
PutBitmap3(&grcGame, xpos, ypos, &rcWater[1], SURFACE_ID_LEVEL_BACKGROUND);
|
PutBitmap3(&grcGame, xpos, ypos, &rcWater[1], SURFACE_ID_LEVEL_BACKGROUND);
|
||||||
if (!y)
|
if (!y)
|
||||||
PutBitmap3(&grcGame, xpos, ypos, rcWater, SURFACE_ID_LEVEL_BACKGROUND);
|
PutBitmap3(&grcGame, xpos, ypos, rcWater, SURFACE_ID_LEVEL_BACKGROUND);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Draw black bars
|
//Draw black bars
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
struct BACK
|
struct BACK
|
||||||
{
|
{
|
||||||
int flag;
|
int flag;
|
||||||
|
@ -14,7 +16,7 @@ struct BACK
|
||||||
extern BACK gBack;
|
extern BACK gBack;
|
||||||
extern int gWaterY;
|
extern int gWaterY;
|
||||||
|
|
||||||
bool InitBack(char *fName, int type);
|
BOOL InitBack(const char *fName, int type);
|
||||||
void ActBack();
|
void ActBack();
|
||||||
void PutBack(int fx, int fy);
|
void PutBack(int fx, int fy);
|
||||||
void PutFront(int fx, int fy);
|
void PutFront(int fx, int fy);
|
||||||
|
|
22
src/Boss.cpp
22
src/Boss.cpp
|
@ -1,9 +1,10 @@
|
||||||
|
#include "Boss.h"
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Boss.h"
|
|
||||||
#include "BossAlmo1.h"
|
#include "BossAlmo1.h"
|
||||||
#include "BossAlmo2.h"
|
#include "BossAlmo2.h"
|
||||||
#include "BossBallos.h"
|
#include "BossBallos.h"
|
||||||
|
@ -13,16 +14,16 @@
|
||||||
#include "BossPress.h"
|
#include "BossPress.h"
|
||||||
#include "BossTwinD.h"
|
#include "BossTwinD.h"
|
||||||
#include "BossX.h"
|
#include "BossX.h"
|
||||||
#include "NpChar.h"
|
#include "Bullet.h"
|
||||||
#include "MyChar.h"
|
|
||||||
#include "Sound.h"
|
|
||||||
#include "NpcHit.h"
|
|
||||||
#include "Caret.h"
|
#include "Caret.h"
|
||||||
#include "TextScr.h"
|
|
||||||
#include "ValueView.h"
|
|
||||||
#include "Draw.h"
|
#include "Draw.h"
|
||||||
#include "Map.h"
|
#include "Map.h"
|
||||||
#include "Bullet.h"
|
#include "MyChar.h"
|
||||||
|
#include "NpChar.h"
|
||||||
|
#include "NpcHit.h"
|
||||||
|
#include "Sound.h"
|
||||||
|
#include "TextScr.h"
|
||||||
|
#include "ValueView.h"
|
||||||
|
|
||||||
NPCHAR gBoss[BOSS_MAX];
|
NPCHAR gBoss[BOSS_MAX];
|
||||||
|
|
||||||
|
@ -66,7 +67,7 @@ void PutBossChar(int fx, int fy)
|
||||||
(gBoss[b].x - side) / 0x200 - fx / 0x200 + a,
|
(gBoss[b].x - side) / 0x200 - fx / 0x200 + a,
|
||||||
(gBoss[b].y - gBoss[b].view.top) / 0x200 - fy / 0x200,
|
(gBoss[b].y - gBoss[b].view.top) / 0x200 - fy / 0x200,
|
||||||
&gBoss[b].rect,
|
&gBoss[b].rect,
|
||||||
22);
|
SURFACE_ID_LEVEL_SPRITESET_2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -208,8 +209,7 @@ void ActBossChar()
|
||||||
{
|
{
|
||||||
if (gBoss[0].cond & 0x80)
|
if (gBoss[0].cond & 0x80)
|
||||||
{
|
{
|
||||||
if (gpBossFuncTbl[gBoss[0].code_char] != nullptr)
|
gpBossFuncTbl[gBoss[0].code_char]();
|
||||||
gpBossFuncTbl[gBoss[0].code_char]();
|
|
||||||
|
|
||||||
for (int bos = 0; bos < BOSS_MAX; bos++)
|
for (int bos = 0; bos < BOSS_MAX; bos++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "NpChar.h"
|
#include "NpChar.h"
|
||||||
|
|
||||||
#define BOSS_MAX 20
|
#define BOSS_MAX 20
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "BossAlmo1.h"
|
#include "BossAlmo1.h"
|
||||||
|
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Boss.h"
|
#include "Boss.h"
|
||||||
#include "Frame.h"
|
#include "Frame.h"
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "BossAlmo2.h"
|
#include "BossAlmo2.h"
|
||||||
|
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Boss.h"
|
#include "Boss.h"
|
||||||
#include "Flash.h"
|
#include "Flash.h"
|
||||||
#include "Frame.h"
|
#include "Frame.h"
|
||||||
|
@ -9,7 +11,6 @@
|
||||||
#include "NpChar.h"
|
#include "NpChar.h"
|
||||||
#include "Sound.h"
|
#include "Sound.h"
|
||||||
#include "Triangle.h"
|
#include "Triangle.h"
|
||||||
#include "WindowsWrapper.h"
|
|
||||||
|
|
||||||
static void ActBossCharA_Head(NPCHAR *npc)
|
static void ActBossCharA_Head(NPCHAR *npc)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "BossBallos.h"
|
#include "BossBallos.h"
|
||||||
|
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Boss.h"
|
#include "Boss.h"
|
||||||
#include "Flash.h"
|
#include "Flash.h"
|
||||||
#include "Frame.h"
|
#include "Frame.h"
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "BossFrog.h"
|
#include "BossFrog.h"
|
||||||
|
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Boss.h"
|
#include "Boss.h"
|
||||||
#include "Frame.h"
|
#include "Frame.h"
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
|
@ -7,7 +9,6 @@
|
||||||
#include "NpChar.h"
|
#include "NpChar.h"
|
||||||
#include "Sound.h"
|
#include "Sound.h"
|
||||||
#include "Triangle.h"
|
#include "Triangle.h"
|
||||||
#include "WindowsWrapper.h"
|
|
||||||
|
|
||||||
static void ActBossChar02_01(void)
|
static void ActBossChar02_01(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
#include "BossIronH.h"
|
#include "BossIronH.h"
|
||||||
|
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Boss.h"
|
#include "Boss.h"
|
||||||
#include "Frame.h"
|
#include "Frame.h"
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "MyChar.h"
|
#include "MyChar.h"
|
||||||
#include "Sound.h"
|
#include "Sound.h"
|
||||||
#include "WindowsWrapper.h"
|
|
||||||
|
|
||||||
void ActBossChar_Ironhead(void)
|
void ActBossChar_Ironhead(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
|
#include "BossLife.h"
|
||||||
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "CommonDefines.h"
|
#include "CommonDefines.h"
|
||||||
#include "BossLife.h"
|
#include "Boss.h"
|
||||||
#include "Draw.h"
|
#include "Draw.h"
|
||||||
#include "NpChar.h"
|
#include "NpChar.h"
|
||||||
#include "Boss.h"
|
|
||||||
|
|
||||||
static struct
|
static struct
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
|
#include "BossOhm.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Boss.h"
|
#include "Boss.h"
|
||||||
#include "NpChar.h"
|
|
||||||
#include "MyChar.h"
|
|
||||||
#include "Sound.h"
|
|
||||||
#include "Frame.h"
|
|
||||||
#include "Bullet.h"
|
#include "Bullet.h"
|
||||||
#include "Flash.h"
|
#include "Flash.h"
|
||||||
|
#include "Frame.h"
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
|
#include "MyChar.h"
|
||||||
|
#include "NpChar.h"
|
||||||
|
#include "Sound.h"
|
||||||
|
|
||||||
void ActBoss01_12()
|
void ActBoss01_12()
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
void ActBossChar_Omega();
|
void ActBossChar_Omega();
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
#include "BossPress.h"
|
#include "BossPress.h"
|
||||||
|
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Boss.h"
|
#include "Boss.h"
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "Map.h"
|
#include "Map.h"
|
||||||
#include "Sound.h"
|
#include "Sound.h"
|
||||||
#include "WindowsWrapper.h"
|
|
||||||
|
|
||||||
void ActBossChar_Press(void)
|
void ActBossChar_Press(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "BossTwinD.h"
|
#include "BossTwinD.h"
|
||||||
|
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Boss.h"
|
#include "Boss.h"
|
||||||
#include "Flash.h"
|
#include "Flash.h"
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
|
@ -7,7 +9,6 @@
|
||||||
#include "NpChar.h"
|
#include "NpChar.h"
|
||||||
#include "Sound.h"
|
#include "Sound.h"
|
||||||
#include "Triangle.h"
|
#include "Triangle.h"
|
||||||
#include "WindowsWrapper.h"
|
|
||||||
|
|
||||||
static void ActBossCharT_DragonBody(NPCHAR *npc)
|
static void ActBossCharT_DragonBody(NPCHAR *npc)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "BossX.h"
|
#include "BossX.h"
|
||||||
|
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Boss.h"
|
#include "Boss.h"
|
||||||
#include "Flash.h"
|
#include "Flash.h"
|
||||||
#include "Frame.h"
|
#include "Frame.h"
|
||||||
|
@ -8,7 +10,6 @@
|
||||||
#include "NpChar.h"
|
#include "NpChar.h"
|
||||||
#include "Sound.h"
|
#include "Sound.h"
|
||||||
#include "Triangle.h"
|
#include "Triangle.h"
|
||||||
#include "WindowsWrapper.h"
|
|
||||||
|
|
||||||
static void ActBossChar03_01(NPCHAR *npc)
|
static void ActBossChar03_01(NPCHAR *npc)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
|
#include "BulHit.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "Bullet.h"
|
#include "Bullet.h"
|
||||||
#include "NpChar.h"
|
|
||||||
#include "Caret.h"
|
#include "Caret.h"
|
||||||
#include "Sound.h"
|
|
||||||
#include "MyChar.h"
|
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "Map.h"
|
#include "Map.h"
|
||||||
|
#include "MyChar.h"
|
||||||
|
#include "NpChar.h"
|
||||||
|
#include "Sound.h"
|
||||||
|
|
||||||
void Vanish(BULLET *bul)
|
void Vanish(BULLET *bul)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
void HitBulletMap();
|
void HitBulletMap();
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
#include "Bullet.h"
|
#include "Bullet.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "Draw.h"
|
#include "Draw.h"
|
||||||
#include "Caret.h"
|
#include "Caret.h"
|
||||||
#include "NpChar.h"
|
|
||||||
#include "MyChar.h"
|
|
||||||
#include "Sound.h"
|
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "KeyControl.h"
|
#include "KeyControl.h"
|
||||||
|
#include "MyChar.h"
|
||||||
|
#include "NpChar.h"
|
||||||
|
#include "Sound.h"
|
||||||
|
|
||||||
BULLET_TABLE gBulTbl[46] =
|
BULLET_TABLE gBulTbl[46] =
|
||||||
{
|
{
|
||||||
|
@ -135,7 +138,7 @@ void PutBullet(int fx, int fy)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
PutBitmap3(&grcGame, x / 0x200 - fx / 0x200, y / 0x200 - fy / 0x200, &gBul[i].rect, 17);
|
PutBitmap3(&grcGame, x / 0x200 - fx / 0x200, y / 0x200 - fy / 0x200, &gBul[i].rect, SURFACE_ID_BULLET);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
struct BULLET
|
struct BULLET
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
#include <string>
|
#include "Caret.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Caret.h"
|
|
||||||
#include "Draw.h"
|
#include "Draw.h"
|
||||||
#include "Triangle.h"
|
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
|
#include "Triangle.h"
|
||||||
|
|
||||||
#define CARET_MAX 0x40
|
#define CARET_MAX 0x40
|
||||||
CARET gCrt[CARET_MAX];
|
CARET gCrt[CARET_MAX];
|
||||||
|
@ -539,7 +540,7 @@ void PutCaret(int fx, int fy)
|
||||||
(gCrt[i].x - gCrt[i].view_left) / 0x200 - fx / 0x200,
|
(gCrt[i].x - gCrt[i].view_left) / 0x200 - fx / 0x200,
|
||||||
(gCrt[i].y - gCrt[i].view_top) / 0x200 - fy / 0x200,
|
(gCrt[i].y - gCrt[i].view_top) / 0x200 - fy / 0x200,
|
||||||
&gCrt[i].rect,
|
&gCrt[i].rect,
|
||||||
19);
|
SURFACE_ID_CARET);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
struct CARET_TABLE
|
struct CARET_TABLE
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#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.
|
#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.
|
||||||
|
|
||||||
#define WINDOW_WIDTH 320
|
#define WINDOW_WIDTH 320
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include "Types.h"
|
|
||||||
#include "CommonDefines.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <SDL_rwops.h>
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Tags.h"
|
#include "CommonDefines.h"
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
|
#include "File.h"
|
||||||
|
#include "Tags.h"
|
||||||
|
#include "Types.h"
|
||||||
|
|
||||||
bool LoadConfigData(CONFIG *conf)
|
bool LoadConfigData(CONFIG *conf)
|
||||||
{
|
{
|
||||||
|
@ -21,30 +21,30 @@ bool LoadConfigData(CONFIG *conf)
|
||||||
sprintf(path, "%s/%s", gModulePath, "Config.dat");
|
sprintf(path, "%s/%s", gModulePath, "Config.dat");
|
||||||
|
|
||||||
//Open file
|
//Open file
|
||||||
SDL_RWops *fp = SDL_RWFromFile(path, "rb");
|
FILE *fp = fopen(path, "rb");
|
||||||
if (!fp)
|
if (fp == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
//Read data (we're using SDL_RWops so we can load it with the specific endianness expected)
|
//Read data
|
||||||
//Read the version id and font name
|
//Read the version id and font name
|
||||||
fp->read(fp, conf->proof, sizeof(conf->proof), 1);
|
fread(conf->proof, sizeof(conf->proof), 1, fp);
|
||||||
fp->read(fp, conf->font_name, sizeof(conf->font_name), 1);
|
fread(conf->font_name, sizeof(conf->font_name), 1, fp);
|
||||||
|
|
||||||
//Read control settings
|
//Read control settings
|
||||||
conf->move_button_mode = SDL_ReadLE32(fp);
|
conf->move_button_mode = File_ReadLE32(fp);
|
||||||
conf->attack_button_mode = SDL_ReadLE32(fp);
|
conf->attack_button_mode = File_ReadLE32(fp);
|
||||||
conf->ok_button_mode = SDL_ReadLE32(fp);
|
conf->ok_button_mode = File_ReadLE32(fp);
|
||||||
|
|
||||||
//Read display mode (320x240, 640x480, 24-bit fullscreen, 32-bit fullscreen) TODO: add more things?
|
//Read display mode (320x240, 640x480, 24-bit fullscreen, 32-bit fullscreen) TODO: add more things?
|
||||||
conf->display_mode = SDL_ReadLE32(fp);
|
conf->display_mode = File_ReadLE32(fp);
|
||||||
|
|
||||||
//Read joystick configuration (if enabled, and mappings)
|
//Read joystick configuration (if enabled, and mappings)
|
||||||
conf->bJoystick = SDL_ReadLE32(fp);
|
conf->bJoystick = File_ReadLE32(fp);
|
||||||
for (int button = 0; button < 8; button++)
|
for (int button = 0; button < 8; button++)
|
||||||
conf->joystick_button[button] = SDL_ReadLE32(fp);
|
conf->joystick_button[button] = File_ReadLE32(fp);
|
||||||
|
|
||||||
//Close file
|
//Close file
|
||||||
fp->close(fp);
|
fclose(fp);
|
||||||
|
|
||||||
//Check if version is correct, return that it succeeded
|
//Check if version is correct, return that it succeeded
|
||||||
if (!strcmp(conf->proof, "DOUKUTSU20041206"))
|
if (!strcmp(conf->proof, "DOUKUTSU20041206"))
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
struct CONFIG
|
struct CONFIG
|
||||||
|
|
81
src/Draw.cpp
81
src/Draw.cpp
|
@ -1,8 +1,6 @@
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include "Types.h"
|
|
||||||
#include "CommonDefines.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
#define RECT WINRECT
|
#define RECT WINRECT
|
||||||
|
@ -22,10 +20,23 @@
|
||||||
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
|
#include "CommonDefines.h"
|
||||||
#include "Draw.h"
|
#include "Draw.h"
|
||||||
#include "Font.h"
|
#include "Font.h"
|
||||||
#include "Tags.h"
|
|
||||||
#include "Resource.h"
|
#include "Resource.h"
|
||||||
|
#include "Tags.h"
|
||||||
|
#include "Types.h"
|
||||||
|
|
||||||
|
struct SURFACE
|
||||||
|
{
|
||||||
|
bool in_use;
|
||||||
|
bool needs_updating;
|
||||||
|
SDL_Surface *surface;
|
||||||
|
SDL_Texture *texture;
|
||||||
|
};
|
||||||
|
|
||||||
|
SDL_Window *gWindow;
|
||||||
|
SDL_Renderer *gRenderer;
|
||||||
|
|
||||||
RECT grcGame = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
|
RECT grcGame = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
|
||||||
RECT grcFull = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
|
RECT grcFull = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
|
||||||
|
@ -39,12 +50,12 @@ FontObject *gFont;
|
||||||
|
|
||||||
#define FRAMERATE 20
|
#define FRAMERATE 20
|
||||||
|
|
||||||
bool Flip_SystemTask()
|
BOOL Flip_SystemTask()
|
||||||
{
|
{
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
if (!SystemTask())
|
if (!SystemTask())
|
||||||
return false;
|
return FALSE;
|
||||||
|
|
||||||
//Framerate limiter
|
//Framerate limiter
|
||||||
static uint32_t timePrev;
|
static uint32_t timePrev;
|
||||||
|
@ -64,10 +75,10 @@ bool Flip_SystemTask()
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_RenderPresent(gRenderer);
|
SDL_RenderPresent(gRenderer);
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StartDirectDraw(int lMagnification, int lColourDepth)
|
BOOL StartDirectDraw(int lMagnification, int lColourDepth)
|
||||||
{
|
{
|
||||||
//Initialize rendering
|
//Initialize rendering
|
||||||
SDL_InitSubSystem(SDL_INIT_VIDEO);
|
SDL_InitSubSystem(SDL_INIT_VIDEO);
|
||||||
|
@ -96,7 +107,7 @@ bool StartDirectDraw(int lMagnification, int lColourDepth)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EndDirectDraw()
|
void EndDirectDraw()
|
||||||
|
@ -133,9 +144,9 @@ void ReleaseSurface(int s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MakeSurface_Generic(int bxsize, int bysize, int surf_no)
|
BOOL MakeSurface_Generic(int bxsize, int bysize, Surface_Ids surf_no)
|
||||||
{
|
{
|
||||||
bool success = false;
|
BOOL success = FALSE;
|
||||||
|
|
||||||
#ifdef FIX_BUGS
|
#ifdef FIX_BUGS
|
||||||
if (surf_no >= SURFACE_ID_MAX)
|
if (surf_no >= SURFACE_ID_MAX)
|
||||||
|
@ -155,6 +166,7 @@ bool MakeSurface_Generic(int bxsize, int bysize, int surf_no)
|
||||||
{
|
{
|
||||||
//Create surface
|
//Create surface
|
||||||
surf[surf_no].surface = SDL_CreateRGBSurfaceWithFormat(0, bxsize * magnification, bysize * magnification, 0, SDL_PIXELFORMAT_RGBA32);
|
surf[surf_no].surface = SDL_CreateRGBSurfaceWithFormat(0, bxsize * magnification, bysize * magnification, 0, SDL_PIXELFORMAT_RGBA32);
|
||||||
|
SDL_SetSurfaceBlendMode(surf[surf_no].surface, SDL_BLENDMODE_NONE);
|
||||||
|
|
||||||
if (surf[surf_no].surface == NULL)
|
if (surf[surf_no].surface == NULL)
|
||||||
{
|
{
|
||||||
|
@ -172,7 +184,7 @@ bool MakeSurface_Generic(int bxsize, int bysize, int surf_no)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
surf[surf_no].in_use = true;
|
surf[surf_no].in_use = true;
|
||||||
success = true;
|
success = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -181,7 +193,7 @@ bool MakeSurface_Generic(int bxsize, int bysize, int surf_no)
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void FlushSurface(int surf_no)
|
static void FlushSurface(Surface_Ids surf_no)
|
||||||
{
|
{
|
||||||
unsigned char *raw_pixels;
|
unsigned char *raw_pixels;
|
||||||
int pitch;
|
int pitch;
|
||||||
|
@ -208,7 +220,7 @@ static void FlushSurface(int surf_no)
|
||||||
SDL_UnlockTexture(surf[surf_no].texture);
|
SDL_UnlockTexture(surf[surf_no].texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool LoadBitmap(SDL_RWops *fp, int surf_no, bool create_surface)
|
static bool LoadBitmap(SDL_RWops *fp, Surface_Ids surf_no, bool create_surface)
|
||||||
{
|
{
|
||||||
bool success = false;
|
bool success = false;
|
||||||
|
|
||||||
|
@ -224,7 +236,7 @@ static bool LoadBitmap(SDL_RWops *fp, int surf_no, bool create_surface)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SDL_Surface *surface = SDL_LoadBMP_RW(fp, 1);
|
SDL_Surface *surface = SDL_LoadBMP_RW(fp, 0);
|
||||||
|
|
||||||
if (surface == NULL)
|
if (surface == NULL)
|
||||||
{
|
{
|
||||||
|
@ -238,7 +250,6 @@ static bool LoadBitmap(SDL_RWops *fp, int surf_no, bool create_surface)
|
||||||
{
|
{
|
||||||
SDL_Rect dst_rect = {0, 0, surface->w, surface->h};
|
SDL_Rect dst_rect = {0, 0, surface->w, surface->h};
|
||||||
SDL_BlitSurface(surface, NULL, surf[surf_no].surface, &dst_rect);
|
SDL_BlitSurface(surface, NULL, surf[surf_no].surface, &dst_rect);
|
||||||
SDL_FreeSurface(surface);
|
|
||||||
surf[surf_no].needs_updating = true;
|
surf[surf_no].needs_updating = true;
|
||||||
printf(" ^ Successfully loaded\n");
|
printf(" ^ Successfully loaded\n");
|
||||||
success = true;
|
success = true;
|
||||||
|
@ -287,10 +298,12 @@ static bool LoadBitmap(SDL_RWops *fp, int surf_no, bool create_surface)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fp->close(fp);
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool LoadBitmap_File(const char *name, int surf_no, bool create_surface)
|
static BOOL LoadBitmap_File(const char *name, Surface_Ids surf_no, bool create_surface)
|
||||||
{
|
{
|
||||||
char path[PATH_LENGTH];
|
char path[PATH_LENGTH];
|
||||||
SDL_RWops *fp;
|
SDL_RWops *fp;
|
||||||
|
@ -303,12 +316,13 @@ static bool LoadBitmap_File(const char *name, int surf_no, bool create_surface)
|
||||||
if (!IsEnableBitmap(fp))
|
if (!IsEnableBitmap(fp))
|
||||||
{
|
{
|
||||||
printf("Tried to load bitmap to surface %d, but it's missing the '(C)Pixel' string\n", surf_no);
|
printf("Tried to load bitmap to surface %d, but it's missing the '(C)Pixel' string\n", surf_no);
|
||||||
|
fp->close(fp);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("Loading surface (as .pbm) from %s for surface id %d\n", path, surf_no);
|
printf("Loading surface (as .pbm) from %s for surface id %d\n", path, surf_no);
|
||||||
if (LoadBitmap(fp, surf_no, create_surface))
|
if (LoadBitmap(fp, surf_no, create_surface))
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,14 +333,14 @@ static bool LoadBitmap_File(const char *name, int surf_no, bool create_surface)
|
||||||
{
|
{
|
||||||
printf("Loading surface (as .bmp) from %s for surface id %d\n", path, surf_no);
|
printf("Loading surface (as .bmp) from %s for surface id %d\n", path, surf_no);
|
||||||
if (LoadBitmap(fp, surf_no, create_surface))
|
if (LoadBitmap(fp, surf_no, create_surface))
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Failed to open file %s\n", name);
|
printf("Failed to open file %s\n", name);
|
||||||
return false;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool LoadBitmap_Resource(const char *res, int surf_no, bool create_surface)
|
static BOOL LoadBitmap_Resource(const char *res, Surface_Ids surf_no, bool create_surface)
|
||||||
{
|
{
|
||||||
SDL_RWops *fp = FindResource(res);
|
SDL_RWops *fp = FindResource(res);
|
||||||
|
|
||||||
|
@ -334,29 +348,29 @@ static bool LoadBitmap_Resource(const char *res, int surf_no, bool create_surfac
|
||||||
{
|
{
|
||||||
printf("Loading surface from resource %s for surface id %d\n", res, surf_no);
|
printf("Loading surface from resource %s for surface id %d\n", res, surf_no);
|
||||||
if (LoadBitmap(fp, surf_no, create_surface))
|
if (LoadBitmap(fp, surf_no, create_surface))
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Failed to open resource %s\n", res);
|
printf("Failed to open resource %s\n", res);
|
||||||
return false;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MakeSurface_File(const char *name, int surf_no)
|
BOOL MakeSurface_File(const char *name, Surface_Ids surf_no)
|
||||||
{
|
{
|
||||||
return LoadBitmap_File(name, surf_no, true);
|
return LoadBitmap_File(name, surf_no, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MakeSurface_Resource(const char *res, int surf_no)
|
BOOL MakeSurface_Resource(const char *res, Surface_Ids surf_no)
|
||||||
{
|
{
|
||||||
return LoadBitmap_Resource(res, surf_no, true);
|
return LoadBitmap_Resource(res, surf_no, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ReloadBitmap_File(const char *name, int surf_no)
|
BOOL ReloadBitmap_File(const char *name, Surface_Ids surf_no)
|
||||||
{
|
{
|
||||||
return LoadBitmap_File(name, surf_no, false);
|
return LoadBitmap_File(name, surf_no, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ReloadBitmap_Resource(const char *res, int surf_no)
|
BOOL ReloadBitmap_Resource(const char *res, Surface_Ids surf_no)
|
||||||
{
|
{
|
||||||
return LoadBitmap_Resource(res, surf_no, false);
|
return LoadBitmap_Resource(res, surf_no, false);
|
||||||
}
|
}
|
||||||
|
@ -371,7 +385,7 @@ SDL_Rect RectToSDLRect(RECT *rect)
|
||||||
return SDLRect;
|
return SDLRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BackupSurface(int surf_no, RECT *rect)
|
void BackupSurface(Surface_Ids surf_no, RECT *rect)
|
||||||
{
|
{
|
||||||
//Get renderer size
|
//Get renderer size
|
||||||
int w, h;
|
int w, h;
|
||||||
|
@ -379,6 +393,7 @@ void BackupSurface(int surf_no, RECT *rect)
|
||||||
|
|
||||||
//Get texture of what's currently rendered on screen
|
//Get texture of what's currently rendered on screen
|
||||||
SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormat(0, w, h, 0, SDL_PIXELFORMAT_RGBA32);
|
SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormat(0, w, h, 0, SDL_PIXELFORMAT_RGBA32);
|
||||||
|
SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_NONE);
|
||||||
SDL_RenderReadPixels(gRenderer, NULL, SDL_PIXELFORMAT_RGBA32, surface->pixels, surface->pitch);
|
SDL_RenderReadPixels(gRenderer, NULL, SDL_PIXELFORMAT_RGBA32, surface->pixels, surface->pitch);
|
||||||
|
|
||||||
//Get rects
|
//Get rects
|
||||||
|
@ -392,7 +407,7 @@ void BackupSurface(int surf_no, RECT *rect)
|
||||||
SDL_FreeSurface(surface);
|
SDL_FreeSurface(surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DrawBitmap(RECT *rcView, int x, int y, RECT *rect, int surf_no, bool transparent)
|
static void DrawBitmap(RECT *rcView, int x, int y, RECT *rect, Surface_Ids surf_no, bool transparent)
|
||||||
{
|
{
|
||||||
if (surf[surf_no].needs_updating)
|
if (surf[surf_no].needs_updating)
|
||||||
{
|
{
|
||||||
|
@ -423,12 +438,12 @@ static void DrawBitmap(RECT *rcView, int x, int y, RECT *rect, int surf_no, bool
|
||||||
SDL_RenderSetClipRect(gRenderer, NULL);
|
SDL_RenderSetClipRect(gRenderer, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PutBitmap3(RECT *rcView, int x, int y, RECT *rect, int surf_no) //Transparency
|
void PutBitmap3(RECT *rcView, int x, int y, RECT *rect, Surface_Ids surf_no) //Transparency
|
||||||
{
|
{
|
||||||
DrawBitmap(rcView, x, y, rect, surf_no, true);
|
DrawBitmap(rcView, x, y, rect, surf_no, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PutBitmap4(RECT *rcView, int x, int y, RECT *rect, int surf_no) //No Transparency
|
void PutBitmap4(RECT *rcView, int x, int y, RECT *rect, Surface_Ids surf_no) //No Transparency
|
||||||
{
|
{
|
||||||
DrawBitmap(rcView, x, y, rect, surf_no, false);
|
DrawBitmap(rcView, x, y, rect, surf_no, false);
|
||||||
}
|
}
|
||||||
|
@ -455,7 +470,7 @@ void CortBox(RECT *rect, uint32_t col)
|
||||||
SDL_RenderFillRect(gRenderer, &destRect);
|
SDL_RenderFillRect(gRenderer, &destRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CortBox2(RECT *rect, uint32_t col, int surf_no)
|
void CortBox2(RECT *rect, uint32_t col, Surface_Ids surf_no)
|
||||||
{
|
{
|
||||||
//Get rect
|
//Get rect
|
||||||
SDL_Rect destRect = RectToSDLRect(rect);
|
SDL_Rect destRect = RectToSDLRect(rect);
|
||||||
|
@ -577,7 +592,7 @@ void PutText(int x, int y, const char *text, uint32_t color)
|
||||||
SDL_DestroyTexture(screen_texture);
|
SDL_DestroyTexture(screen_texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PutText2(int x, int y, const char *text, uint32_t color, int surf_no)
|
void PutText2(int x, int y, const char *text, uint32_t color, Surface_Ids surf_no)
|
||||||
{
|
{
|
||||||
DrawText(gFont, surf[surf_no].surface, x * magnification, y * magnification, color, text, strlen(text));
|
DrawText(gFont, surf[surf_no].surface, x * magnification, y * magnification, color, text, strlen(text));
|
||||||
surf[surf_no].needs_updating = true;
|
surf[surf_no].needs_updating = true;
|
||||||
|
|
103
src/Draw.h
103
src/Draw.h
|
@ -1,10 +1,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <stdint.h>
|
|
||||||
#include "WindowsWrapper.h"
|
|
||||||
#include <SDL_render.h>
|
|
||||||
|
|
||||||
extern SDL_Window *gWindow;
|
#include <stdint.h>
|
||||||
extern SDL_Renderer *gRenderer;
|
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
extern RECT grcGame;
|
extern RECT grcGame;
|
||||||
extern RECT grcFull;
|
extern RECT grcFull;
|
||||||
|
@ -12,63 +10,62 @@ extern RECT grcFull;
|
||||||
extern int magnification;
|
extern int magnification;
|
||||||
extern bool fullscreen;
|
extern bool fullscreen;
|
||||||
|
|
||||||
enum Surface_Ids
|
typedef enum Surface_Ids
|
||||||
{
|
{
|
||||||
SURFACE_ID_TITLE = 0x0,
|
SURFACE_ID_TITLE = 0,
|
||||||
SURFACE_ID_PIXEL = 0x1,
|
SURFACE_ID_PIXEL = 1,
|
||||||
SURFACE_ID_LEVEL_TILESET = 0x2,
|
SURFACE_ID_LEVEL_TILESET = 2,
|
||||||
SURFACE_ID_FADE = 0x6,
|
SURFACE_ID_FADE = 6,
|
||||||
SURFACE_ID_ITEM_IMAGE = 0x8,
|
SURFACE_ID_ITEM_IMAGE = 8,
|
||||||
SURFACE_ID_MAP = 0x9,
|
SURFACE_ID_MAP = 9,
|
||||||
SURFACE_ID_SCREEN_GRAB = 0xA,
|
SURFACE_ID_SCREEN_GRAB = 10,
|
||||||
SURFACE_ID_ARMS = 0xB,
|
SURFACE_ID_ARMS = 11,
|
||||||
SURFACE_ID_ARMS_IMAGE = 0xC,
|
SURFACE_ID_ARMS_IMAGE = 12,
|
||||||
SURFACE_ID_ROOM_NAME = 0xD,
|
SURFACE_ID_ROOM_NAME = 13,
|
||||||
SURFACE_ID_STAGE_ITEM = 0xE,
|
SURFACE_ID_STAGE_ITEM = 14,
|
||||||
SURFACE_ID_LOADING = 0xF,
|
SURFACE_ID_LOADING = 15,
|
||||||
SURFACE_ID_MY_CHAR = 0x10,
|
SURFACE_ID_MY_CHAR = 16,
|
||||||
SURFACE_ID_BULLET = 0x11,
|
SURFACE_ID_BULLET = 17,
|
||||||
SURFACE_ID_CARET = 0x13,
|
SURFACE_ID_CARET = 19,
|
||||||
SURFACE_ID_NPC_SYM = 0x14,
|
SURFACE_ID_NPC_SYM = 20,
|
||||||
SURFACE_ID_LEVEL_SPRITESET_1 = 0x15,
|
SURFACE_ID_LEVEL_SPRITESET_1 = 21,
|
||||||
SURFACE_ID_LEVEL_SPRITESET_2 = 0x16,
|
SURFACE_ID_LEVEL_SPRITESET_2 = 22,
|
||||||
SURFACE_ID_NPC_REGU = 0x17,
|
SURFACE_ID_NPC_REGU = 23,
|
||||||
SURFACE_ID_TEXT_BOX = 0x1A,
|
SURFACE_ID_TEXT_BOX = 26,
|
||||||
SURFACE_ID_FACE = 0x1B,
|
SURFACE_ID_FACE = 27,
|
||||||
SURFACE_ID_LEVEL_BACKGROUND = 0x1C,
|
SURFACE_ID_LEVEL_BACKGROUND = 28,
|
||||||
SURFACE_ID_CREDIT_CAST = 0x23,
|
SURFACE_ID_VALUE_VIEW = 29,
|
||||||
SURFACE_ID_CREDITS_IMAGE = 0x24,
|
SURFACE_ID_TEXT_LINE1 = 30,
|
||||||
SURFACE_ID_CASTS = 0x25,
|
SURFACE_ID_TEXT_LINE2 = 31,
|
||||||
SURFACE_ID_MAX = 0x28,
|
SURFACE_ID_TEXT_LINE3 = 32,
|
||||||
};
|
SURFACE_ID_TEXT_LINE4 = 33,
|
||||||
|
SURFACE_ID_TEXT_LINE5 = 34,
|
||||||
|
SURFACE_ID_CREDIT_CAST = 35,
|
||||||
|
SURFACE_ID_CREDITS_IMAGE = 36,
|
||||||
|
SURFACE_ID_CASTS = 37,
|
||||||
|
SURFACE_ID_MAX = 40,
|
||||||
|
} Surface_Ids;
|
||||||
|
|
||||||
struct SURFACE
|
struct SURFACE;
|
||||||
{
|
|
||||||
bool in_use;
|
|
||||||
bool needs_updating;
|
|
||||||
SDL_Surface *surface;
|
|
||||||
SDL_Texture *texture;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern SURFACE surf[SURFACE_ID_MAX];
|
extern SURFACE surf[SURFACE_ID_MAX];
|
||||||
|
|
||||||
bool Flip_SystemTask();
|
BOOL Flip_SystemTask();
|
||||||
bool StartDirectDraw(int lMagnification, int lColourDepth);
|
BOOL StartDirectDraw(int lMagnification, int lColourDepth);
|
||||||
void EndDirectDraw();
|
void EndDirectDraw();
|
||||||
void ReleaseSurface(int s);
|
void ReleaseSurface(int s);
|
||||||
bool MakeSurface(SDL_RWops *rw, int surf_no);
|
BOOL MakeSurface_File(const char *name, Surface_Ids surf_no);
|
||||||
bool MakeSurface_File(const char *name, int surf_no);
|
BOOL MakeSurface_Resource(const char *res, Surface_Ids surf_no);
|
||||||
bool MakeSurface_Resource(const char *res, int surf_no);
|
BOOL ReloadBitmap_File(const char *name, Surface_Ids surf_no);
|
||||||
bool ReloadBitmap_File(const char *name, int surf_no);
|
BOOL ReloadBitmap_Resource(const char *res, Surface_Ids surf_no);
|
||||||
bool ReloadBitmap_Resource(const char *res, int surf_no);
|
BOOL MakeSurface_Generic(int bxsize, int bysize, Surface_Ids surf_no);
|
||||||
bool MakeSurface_Generic(int bxsize, int bysize, int surf_no);
|
void BackupSurface(Surface_Ids surf_no, RECT *rect);
|
||||||
void BackupSurface(int surf_no, RECT *rect);
|
void PutBitmap3(RECT *rcView, int x, int y, RECT *rect, Surface_Ids surf_no);
|
||||||
void PutBitmap3(RECT *rcView, int x, int y, RECT *rect, int surf_no);
|
void PutBitmap4(RECT *rcView, int x, int y, RECT *rect, Surface_Ids surf_no);
|
||||||
void PutBitmap4(RECT *rcView, int x, int y, RECT *rect, int surf_no);
|
|
||||||
void Surface2Surface(int x, int y, RECT *rect, int to, int from);
|
void Surface2Surface(int x, int y, RECT *rect, int to, int from);
|
||||||
void CortBox(RECT *rect, uint32_t col);
|
void CortBox(RECT *rect, uint32_t col);
|
||||||
void CortBox2(RECT *rect, uint32_t col, int surf_no);
|
void CortBox2(RECT *rect, uint32_t col, Surface_Ids surf_no);
|
||||||
void InitTextObject(const char *font_name);
|
void InitTextObject(const char *font_name);
|
||||||
void PutText(int x, int y, const char *text, uint32_t color);
|
void PutText(int x, int y, const char *text, uint32_t color);
|
||||||
void PutText2(int x, int y, const char *text, uint32_t color, int surf_no);
|
void PutText2(int x, int y, const char *text, uint32_t color, Surface_Ids surf_no);
|
||||||
void EndTextObject();
|
void EndTextObject();
|
||||||
|
|
|
@ -1,21 +1,23 @@
|
||||||
#include <stdint.h>
|
#include "Ending.h"
|
||||||
#include <string>
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <SDL_rwops.h>
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Tags.h"
|
|
||||||
#include "Generic.h"
|
|
||||||
#include "Ending.h"
|
|
||||||
#include "Flags.h"
|
|
||||||
#include "KeyControl.h"
|
|
||||||
#include "Escape.h"
|
|
||||||
#include "Organya.h"
|
|
||||||
#include "MycParam.h"
|
|
||||||
#include "Main.h"
|
|
||||||
#include "Stage.h"
|
|
||||||
#include "Draw.h"
|
#include "Draw.h"
|
||||||
|
#include "Escape.h"
|
||||||
|
#include "Flags.h"
|
||||||
|
#include "Generic.h"
|
||||||
|
#include "KeyControl.h"
|
||||||
|
#include "Main.h"
|
||||||
|
#include "MycParam.h"
|
||||||
|
#include "Organya.h"
|
||||||
|
#include "Stage.h"
|
||||||
#include "TextScr.h"
|
#include "TextScr.h"
|
||||||
|
#include "Tags.h"
|
||||||
|
|
||||||
CREDIT Credit;
|
CREDIT Credit;
|
||||||
STRIP Strip[MAX_STRIP];
|
STRIP Strip[MAX_STRIP];
|
||||||
|
@ -164,25 +166,31 @@ bool StartCreditScript()
|
||||||
char path[PATH_LENGTH];
|
char path[PATH_LENGTH];
|
||||||
sprintf(path, "%s/%s", gDataPath, "Credit.tsc");
|
sprintf(path, "%s/%s", gDataPath, "Credit.tsc");
|
||||||
|
|
||||||
SDL_RWops *fp = SDL_RWFromFile(path, "rb");
|
Credit.size = GetFileSizeLong(path);
|
||||||
if (!fp)
|
if (Credit.size == -1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
//Allcoate buffer data
|
||||||
|
Credit.pData = (char*)malloc(Credit.size);
|
||||||
|
if (Credit.pData == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
FILE *fp = fopen(path, "rb");
|
||||||
|
if (fp == NULL)
|
||||||
{
|
{
|
||||||
printf("Couldn't open %s", path);
|
printf("Couldn't open %s", path);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Allcoate buffer data
|
|
||||||
Credit.size = SDL_RWsize(fp);
|
|
||||||
|
|
||||||
Credit.pData = (char*)malloc(Credit.size);
|
|
||||||
if (!Credit.pData)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
//Read data
|
//Read data
|
||||||
SDL_RWread(fp, Credit.pData, 1, Credit.size);
|
fread(Credit.pData, 1, Credit.size, fp);
|
||||||
SDL_RWclose(fp);
|
|
||||||
EncryptionBinaryData2((uint8_t*)Credit.pData, Credit.size);
|
EncryptionBinaryData2((uint8_t*)Credit.pData, Credit.size);
|
||||||
|
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
// The original game forgot to close the file
|
||||||
|
fclose(fp);
|
||||||
|
#endif
|
||||||
|
|
||||||
//Reset credits
|
//Reset credits
|
||||||
Credit.offset = 0;
|
Credit.offset = 0;
|
||||||
Credit.wait = 0;
|
Credit.wait = 0;
|
||||||
|
@ -192,15 +200,14 @@ bool StartCreditScript()
|
||||||
|
|
||||||
//Modify cliprect
|
//Modify cliprect
|
||||||
grcGame.left = WINDOW_WIDTH / 2;
|
grcGame.left = WINDOW_WIDTH / 2;
|
||||||
|
// These three are non-vanilla: for wide/tallscreen support
|
||||||
grcGame.right = ((WINDOW_WIDTH - 320) / 2) + 320;
|
grcGame.right = ((WINDOW_WIDTH - 320) / 2) + 320;
|
||||||
grcGame.top = (WINDOW_HEIGHT - 240) / 2;
|
grcGame.top = (WINDOW_HEIGHT - 240) / 2;
|
||||||
grcGame.bottom = ((WINDOW_HEIGHT - 240) / 2) + 240;
|
grcGame.bottom = ((WINDOW_HEIGHT - 240) / 2) + 240;
|
||||||
|
|
||||||
//Reload casts
|
//Reload casts
|
||||||
if (!ReloadBitmap_File("casts", SURFACE_ID_CASTS))
|
if (!ReloadBitmap_File("casts", SURFACE_ID_CASTS))
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
//Clear casts
|
//Clear casts
|
||||||
memset(Strip, 0, sizeof(Strip));
|
memset(Strip, 0, sizeof(Strip));
|
||||||
|
@ -451,9 +458,9 @@ int Scene_DownIsland(int mode)
|
||||||
|
|
||||||
//Draw scene
|
//Draw scene
|
||||||
CortBox(&grcFull, 0);
|
CortBox(&grcFull, 0);
|
||||||
PutBitmap3(&rc_frame, 80 + (WINDOW_WIDTH - 320) / 2, 80 + (WINDOW_HEIGHT - 240) / 2, &rc_sky, 21);
|
PutBitmap3(&rc_frame, 80 + (WINDOW_WIDTH - 320) / 2, 80 + (WINDOW_HEIGHT - 240) / 2, &rc_sky, SURFACE_ID_LEVEL_SPRITESET_1);
|
||||||
PutBitmap3(&rc_frame, sprite.x / 0x200 - 20 + (WINDOW_WIDTH - 320) / 2, sprite.y / 512 - 12 + (WINDOW_HEIGHT - 240) / 2, &rc_sprite, 21);
|
PutBitmap3(&rc_frame, sprite.x / 0x200 - 20 + (WINDOW_WIDTH - 320) / 2, sprite.y / 512 - 12 + (WINDOW_HEIGHT - 240) / 2, &rc_sprite, SURFACE_ID_LEVEL_SPRITESET_1);
|
||||||
PutBitmap3(&rc_frame, 80 + (WINDOW_WIDTH - 320) / 2, 128 + (WINDOW_HEIGHT - 240) / 2, &rc_ground, 21);
|
PutBitmap3(&rc_frame, 80 + (WINDOW_WIDTH - 320) / 2, 128 + (WINDOW_HEIGHT - 240) / 2, &rc_ground, SURFACE_ID_LEVEL_SPRITESET_1);
|
||||||
PutTimeCounter(16, 8);
|
PutTimeCounter(16, 8);
|
||||||
|
|
||||||
//Draw window
|
//Draw window
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
struct CREDIT
|
struct CREDIT
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
|
#include "Escape.h"
|
||||||
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "CommonDefines.h"
|
#include "CommonDefines.h"
|
||||||
#include "Escape.h"
|
|
||||||
#include "Draw.h"
|
#include "Draw.h"
|
||||||
#include "KeyControl.h"
|
#include "KeyControl.h"
|
||||||
#include "Main.h"
|
#include "Main.h"
|
||||||
|
@ -33,7 +34,7 @@ int Call_Escape()
|
||||||
|
|
||||||
//Draw screen
|
//Draw screen
|
||||||
CortBox(&grcFull, 0x000000);
|
CortBox(&grcFull, 0x000000);
|
||||||
PutBitmap3(&grcFull, (WINDOW_WIDTH - 208) / 2, (WINDOW_HEIGHT - 16) / 2, &rc, 26);
|
PutBitmap3(&grcFull, (WINDOW_WIDTH - 208) / 2, (WINDOW_HEIGHT - 16) / 2, &rc, SURFACE_ID_TEXT_BOX);
|
||||||
PutFramePerSecound();
|
PutFramePerSecound();
|
||||||
|
|
||||||
if (!Flip_SystemTask())
|
if (!Flip_SystemTask())
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
int Call_Escape();
|
int Call_Escape();
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
#include <string>
|
#include "Fade.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Fade.h"
|
|
||||||
#include "Game.h"
|
|
||||||
#include "Draw.h"
|
#include "Draw.h"
|
||||||
|
#include "Game.h"
|
||||||
|
|
||||||
FADE gFade;
|
FADE gFade;
|
||||||
|
|
||||||
|
@ -283,7 +284,7 @@ void PutFade()
|
||||||
{
|
{
|
||||||
rect.left = 16 * gFade.ani_no[y][x];
|
rect.left = 16 * gFade.ani_no[y][x];
|
||||||
rect.right = rect.left + 16;
|
rect.right = rect.left + 16;
|
||||||
PutBitmap3(&grcGame, 16 * x, 16 * y, &rect, 6);
|
PutBitmap3(&grcGame, 16 * x, 16 * y, &rect, SURFACE_ID_FADE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "CommonDefines.h"
|
#include "CommonDefines.h"
|
||||||
|
|
||||||
#define FADE_WIDTH (((WINDOW_WIDTH - 1) >> 4) + 1)
|
#define FADE_WIDTH (((WINDOW_WIDTH - 1) >> 4) + 1)
|
||||||
|
|
96
src/File.cpp
Normal file
96
src/File.cpp
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
#include "File.h"
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
long LoadFileToMemory(const char *file_path, unsigned char **file_buffer)
|
||||||
|
{
|
||||||
|
long returned_size = -1;
|
||||||
|
|
||||||
|
FILE *file = fopen(file_path, "rb");
|
||||||
|
|
||||||
|
if (file != NULL)
|
||||||
|
{
|
||||||
|
if (!fseek(file, 0, SEEK_END))
|
||||||
|
{
|
||||||
|
const long file_size = ftell(file);
|
||||||
|
|
||||||
|
if (file_size >= 0)
|
||||||
|
{
|
||||||
|
rewind(file);
|
||||||
|
*file_buffer = (unsigned char*)malloc(file_size);
|
||||||
|
|
||||||
|
if (*file_buffer != NULL)
|
||||||
|
{
|
||||||
|
if (fread(*file_buffer, file_size, 1, file) == 1)
|
||||||
|
returned_size = file_size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
return returned_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned short File_ReadBE16(FILE *stream)
|
||||||
|
{
|
||||||
|
unsigned char bytes[2];
|
||||||
|
|
||||||
|
fread(bytes, 2, 1, stream);
|
||||||
|
|
||||||
|
return (bytes[0] << 8) | bytes[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long File_ReadBE32(FILE *stream)
|
||||||
|
{
|
||||||
|
unsigned char bytes[4];
|
||||||
|
|
||||||
|
fread(bytes, 4, 1, stream);
|
||||||
|
|
||||||
|
return (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3];
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned short File_ReadLE16(FILE *stream)
|
||||||
|
{
|
||||||
|
unsigned char bytes[2];
|
||||||
|
|
||||||
|
fread(bytes, 2, 1, stream);
|
||||||
|
|
||||||
|
return (bytes[1] << 8) | bytes[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long File_ReadLE32(FILE *stream)
|
||||||
|
{
|
||||||
|
unsigned char bytes[4];
|
||||||
|
|
||||||
|
fread(bytes, 4, 1, stream);
|
||||||
|
|
||||||
|
return (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | bytes[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
void File_WriteBE16(unsigned short value, FILE *stream)
|
||||||
|
{
|
||||||
|
for (unsigned int i = 2; i-- != 0;)
|
||||||
|
fputc(value >> (8 * i), stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
void File_WriteBE32(unsigned long value, FILE *stream)
|
||||||
|
{
|
||||||
|
for (unsigned int i = 4; i-- != 0;)
|
||||||
|
fputc(value >> (8 * i), stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
void File_WriteLE16(unsigned short value, FILE *stream)
|
||||||
|
{
|
||||||
|
for (unsigned int i = 0; i < 2; ++i)
|
||||||
|
fputc(value >> (8 * i), stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
void File_WriteLE32(unsigned long value, FILE *stream)
|
||||||
|
{
|
||||||
|
for (unsigned int i = 0; i < 4; ++i)
|
||||||
|
fputc(value >> (8 * i), stream);
|
||||||
|
}
|
15
src/File.h
Normal file
15
src/File.h
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
long LoadFileToMemory(const char *file_path, unsigned char **file_buffer);
|
||||||
|
|
||||||
|
unsigned short File_ReadBE16(FILE *stream);
|
||||||
|
unsigned long File_ReadBE32(FILE *stream);
|
||||||
|
unsigned short File_ReadLE16(FILE *stream);
|
||||||
|
unsigned long File_ReadLE32(FILE *stream);
|
||||||
|
|
||||||
|
void File_WriteBE16(unsigned short value, FILE *stream);
|
||||||
|
void File_WriteBE32(unsigned long value, FILE *stream);
|
||||||
|
void File_WriteLE16(unsigned short value, FILE *stream);
|
||||||
|
void File_WriteLE32(unsigned long value, FILE *stream);
|
|
@ -1,7 +1,7 @@
|
||||||
#include "Flags.h"
|
#include "Flags.h"
|
||||||
|
|
||||||
#include <cstring>
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
uint8_t gFlagNPC[1000];
|
uint8_t gFlagNPC[1000];
|
||||||
uint8_t gSkipFlag[0x40];
|
uint8_t gSkipFlag[0x40];
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
extern uint8_t gFlagNPC[1000];
|
extern uint8_t gFlagNPC[1000];
|
||||||
extern uint8_t gSkipFlag[0x40];
|
extern uint8_t gSkipFlag[0x40];
|
||||||
|
|
||||||
|
|
15
src/Font.cpp
15
src/Font.cpp
|
@ -17,6 +17,8 @@
|
||||||
|
|
||||||
#include "SDL.h"
|
#include "SDL.h"
|
||||||
|
|
||||||
|
#include "File.h"
|
||||||
|
|
||||||
// Uncomment for that authentic pre-Windows Vista feel
|
// Uncomment for that authentic pre-Windows Vista feel
|
||||||
//#define DISABLE_FONT_ANTIALIASING
|
//#define DISABLE_FONT_ANTIALIASING
|
||||||
|
|
||||||
|
@ -156,19 +158,12 @@ FontObject* LoadFont(const char *font_filename, unsigned int cell_width, unsigne
|
||||||
{
|
{
|
||||||
FontObject *font_object = NULL;
|
FontObject *font_object = NULL;
|
||||||
|
|
||||||
FILE *file = fopen(font_filename, "rb");
|
unsigned char *file_buffer;
|
||||||
|
const long file_size = LoadFileToMemory(font_filename, &file_buffer);
|
||||||
|
|
||||||
if (file != NULL)
|
if (file_size != -1)
|
||||||
{
|
{
|
||||||
fseek(file, 0, SEEK_END);
|
|
||||||
const size_t file_size = ftell(file);
|
|
||||||
rewind(file);
|
|
||||||
unsigned char *file_buffer = (unsigned char*)malloc(file_size);
|
|
||||||
fread(file_buffer, 1, file_size, file);
|
|
||||||
fclose(file);
|
|
||||||
|
|
||||||
font_object = LoadFontFromData(file_buffer, file_size, cell_width, cell_height);
|
font_object = LoadFontFromData(file_buffer, file_size, cell_width, cell_height);
|
||||||
|
|
||||||
free(file_buffer);
|
free(file_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
|
#include "Frame.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "Frame.h"
|
#include "Boss.h"
|
||||||
|
#include "CommonDefines.h"
|
||||||
|
#include "Game.h"
|
||||||
#include "Map.h"
|
#include "Map.h"
|
||||||
#include "MyChar.h"
|
#include "MyChar.h"
|
||||||
#include "NpChar.h"
|
#include "NpChar.h"
|
||||||
#include "Game.h"
|
|
||||||
#include "CommonDefines.h"
|
|
||||||
#include "Boss.h"
|
|
||||||
|
|
||||||
FRAME gFrame;
|
FRAME gFrame;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
struct FRAME
|
struct FRAME
|
||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
|
|
82
src/Game.cpp
82
src/Game.cpp
|
@ -1,47 +1,49 @@
|
||||||
#include <string>
|
#include "Game.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <SDL_timer.h>
|
#include <SDL_timer.h>
|
||||||
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Tags.h"
|
|
||||||
#include "NpcTbl.h"
|
|
||||||
#include "NpChar.h"
|
|
||||||
#include "NpcHit.h"
|
|
||||||
#include "MiniMap.h"
|
|
||||||
#include "Generic.h"
|
|
||||||
#include "Boss.h"
|
|
||||||
#include "GenericLoad.h"
|
|
||||||
#include "ArmsItem.h"
|
#include "ArmsItem.h"
|
||||||
#include "TextScr.h"
|
|
||||||
#include "Bullet.h"
|
|
||||||
#include "BulHit.h"
|
|
||||||
#include "Shoot.h"
|
|
||||||
#include "Star.h"
|
|
||||||
#include "Fade.h"
|
|
||||||
#include "Frame.h"
|
|
||||||
#include "Flags.h"
|
|
||||||
#include "Escape.h"
|
|
||||||
#include "Stage.h"
|
|
||||||
#include "MyChar.h"
|
|
||||||
#include "MycHit.h"
|
|
||||||
#include "Caret.h"
|
|
||||||
#include "Map.h"
|
|
||||||
#include "Main.h"
|
|
||||||
#include "MycParam.h"
|
|
||||||
#include "MapName.h"
|
|
||||||
#include "Sound.h"
|
|
||||||
#include "Organya.h"
|
|
||||||
#include "Profile.h"
|
|
||||||
#include "MycParam.h"
|
|
||||||
#include "Back.h"
|
#include "Back.h"
|
||||||
#include "KeyControl.h"
|
#include "Boss.h"
|
||||||
#include "ValueView.h"
|
#include "BossLife.h"
|
||||||
|
#include "BulHit.h"
|
||||||
|
#include "Bullet.h"
|
||||||
|
#include "Caret.h"
|
||||||
#include "Draw.h"
|
#include "Draw.h"
|
||||||
#include "Ending.h"
|
#include "Ending.h"
|
||||||
|
#include "Escape.h"
|
||||||
|
#include "Fade.h"
|
||||||
|
#include "Flags.h"
|
||||||
#include "Flash.h"
|
#include "Flash.h"
|
||||||
#include "BossLife.h"
|
#include "Frame.h"
|
||||||
|
#include "Generic.h"
|
||||||
|
#include "GenericLoad.h"
|
||||||
|
#include "KeyControl.h"
|
||||||
|
#include "Main.h"
|
||||||
|
#include "Map.h"
|
||||||
|
#include "MapName.h"
|
||||||
|
#include "MiniMap.h"
|
||||||
|
#include "MyChar.h"
|
||||||
|
#include "MycHit.h"
|
||||||
|
#include "MycParam.h"
|
||||||
|
#include "NpChar.h"
|
||||||
|
#include "NpcHit.h"
|
||||||
|
#include "NpcTbl.h"
|
||||||
|
#include "Organya.h"
|
||||||
|
#include "Profile.h"
|
||||||
#include "SelStage.h"
|
#include "SelStage.h"
|
||||||
|
#include "Shoot.h"
|
||||||
|
#include "Sound.h"
|
||||||
|
#include "Stage.h"
|
||||||
|
#include "Star.h"
|
||||||
|
#include "Tags.h"
|
||||||
|
#include "TextScr.h"
|
||||||
|
#include "ValueView.h"
|
||||||
|
|
||||||
int g_GameFlags;
|
int g_GameFlags;
|
||||||
int gCounter;
|
int gCounter;
|
||||||
|
@ -352,14 +354,14 @@ int ModeTitle()
|
||||||
PutNumber4((WINDOW_WIDTH + 56) / 2, WINDOW_HEIGHT - 24, v4, 0);
|
PutNumber4((WINDOW_WIDTH + 56) / 2, WINDOW_HEIGHT - 24, v4, 0);
|
||||||
|
|
||||||
//Draw main title
|
//Draw main title
|
||||||
PutBitmap3(&grcGame, (WINDOW_WIDTH - 144) / 2, 40, &rcTitle, 0);
|
PutBitmap3(&grcGame, (WINDOW_WIDTH - 144) / 2, 40, &rcTitle, SURFACE_ID_TITLE);
|
||||||
PutBitmap3(&grcGame, (WINDOW_WIDTH - 48) / 2, (WINDOW_HEIGHT + 16) / 2, &rcNew, 0);
|
PutBitmap3(&grcGame, (WINDOW_WIDTH - 48) / 2, (WINDOW_HEIGHT + 16) / 2, &rcNew, SURFACE_ID_TITLE);
|
||||||
PutBitmap3(&grcGame, (WINDOW_WIDTH - 48) / 2, (WINDOW_HEIGHT + 56) / 2, &rcContinue, 0);
|
PutBitmap3(&grcGame, (WINDOW_WIDTH - 48) / 2, (WINDOW_HEIGHT + 56) / 2, &rcContinue, SURFACE_ID_TITLE);
|
||||||
PutBitmap3(&grcGame, (WINDOW_WIDTH - 160) / 2, WINDOW_HEIGHT - 48, &rcPixel, 1);
|
PutBitmap3(&grcGame, (WINDOW_WIDTH - 160) / 2, WINDOW_HEIGHT - 48, &rcPixel, SURFACE_ID_PIXEL);
|
||||||
|
|
||||||
//Draw character cursor
|
//Draw character cursor
|
||||||
RECT char_rc;
|
RECT char_rc;
|
||||||
int char_surf;
|
Surface_Ids char_surf;
|
||||||
|
|
||||||
switch ( char_type )
|
switch ( char_type )
|
||||||
{
|
{
|
||||||
|
@ -530,7 +532,7 @@ int ModeAction()
|
||||||
//Open inventory
|
//Open inventory
|
||||||
if (gKeyTrg & gKeyItem)
|
if (gKeyTrg & gKeyItem)
|
||||||
{
|
{
|
||||||
BackupSurface(10, &grcGame);
|
BackupSurface(SURFACE_ID_SCREEN_GRAB, &grcGame);
|
||||||
|
|
||||||
switch (CampLoop())
|
switch (CampLoop())
|
||||||
{
|
{
|
||||||
|
@ -544,7 +546,7 @@ int ModeAction()
|
||||||
}
|
}
|
||||||
else if (gMC.equip & 2 && gKeyTrg & gKeyMap)
|
else if (gMC.equip & 2 && gKeyTrg & gKeyMap)
|
||||||
{
|
{
|
||||||
BackupSurface(10, &grcGame);
|
BackupSurface(SURFACE_ID_SCREEN_GRAB, &grcGame);
|
||||||
|
|
||||||
switch (MiniMapLoop())
|
switch (MiniMapLoop())
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
extern int g_GameFlags;
|
extern int g_GameFlags;
|
||||||
extern int gCounter;
|
extern int gCounter;
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
#include "Generic.h"
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
@ -13,6 +15,21 @@ bool GetCompileVersion(int *v1, int *v2, int *v3, int *v4)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long GetFileSizeLong(const char *path)
|
||||||
|
{
|
||||||
|
long len = -1;
|
||||||
|
|
||||||
|
FILE *fp = fopen(path, "rb");
|
||||||
|
if (fp != NULL)
|
||||||
|
{
|
||||||
|
fseek(fp, 0, SEEK_END);
|
||||||
|
len = ftell(fp);
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
bool CheckFileExists(const char *name)
|
bool CheckFileExists(const char *name)
|
||||||
{
|
{
|
||||||
char path[PATH_LENGTH];
|
char path[PATH_LENGTH];
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
bool GetCompileVersion(int *v1, int *v2, int *v3, int *v4);
|
bool GetCompileVersion(int *v1, int *v2, int *v3, int *v4);
|
||||||
|
long GetFileSizeLong(const char *path);
|
||||||
bool CheckFileExists(const char *name);
|
bool CheckFileExists(const char *name);
|
||||||
bool IsShiftJIS(uint8_t c);
|
bool IsShiftJIS(uint8_t c);
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
|
#include "GenericLoad.h"
|
||||||
|
|
||||||
#include "CommonDefines.h"
|
#include "CommonDefines.h"
|
||||||
#include "Draw.h"
|
#include "Draw.h"
|
||||||
#include "Sound.h"
|
|
||||||
#include "PixTone.h"
|
|
||||||
#include "Ending.h"
|
#include "Ending.h"
|
||||||
|
#include "PixTone.h"
|
||||||
|
#include "Sound.h"
|
||||||
|
|
||||||
static const PIXTONEPARAMETER gPtpTable[139] =
|
static const PIXTONEPARAMETER gPtpTable[139] =
|
||||||
{
|
{
|
||||||
|
@ -149,37 +151,37 @@ static const PIXTONEPARAMETER gPtpTable[139] =
|
||||||
|
|
||||||
bool LoadGenericData()
|
bool LoadGenericData()
|
||||||
{
|
{
|
||||||
MakeSurface_Resource("PIXEL", 1);
|
MakeSurface_Resource("PIXEL", SURFACE_ID_PIXEL);
|
||||||
|
|
||||||
bool bError = false;
|
bool bError = false;
|
||||||
if (!MakeSurface_File("MyChar", 16))
|
if (!MakeSurface_File("MyChar", SURFACE_ID_MY_CHAR))
|
||||||
bError = true;
|
bError = true;
|
||||||
if (!MakeSurface_File("Title", 0))
|
if (!MakeSurface_File("Title", SURFACE_ID_TITLE))
|
||||||
bError = true;
|
bError = true;
|
||||||
if (!MakeSurface_File("ArmsImage", 12))
|
if (!MakeSurface_File("ArmsImage", SURFACE_ID_ARMS_IMAGE))
|
||||||
bError = true;
|
bError = true;
|
||||||
if (!MakeSurface_File("Arms", 11))
|
if (!MakeSurface_File("Arms", SURFACE_ID_ARMS))
|
||||||
bError = true;
|
bError = true;
|
||||||
if (!MakeSurface_File("ItemImage", 8))
|
if (!MakeSurface_File("ItemImage", SURFACE_ID_ITEM_IMAGE))
|
||||||
bError = true;
|
bError = true;
|
||||||
if (!MakeSurface_File("StageImage", 14))
|
if (!MakeSurface_File("StageImage", SURFACE_ID_STAGE_ITEM))
|
||||||
bError = true;
|
bError = true;
|
||||||
if (!MakeSurface_File("Npc/NpcSym", 20))
|
if (!MakeSurface_File("Npc/NpcSym", SURFACE_ID_NPC_SYM))
|
||||||
bError = true;
|
bError = true;
|
||||||
if (!MakeSurface_File("Npc/NpcRegu", 23))
|
if (!MakeSurface_File("Npc/NpcRegu", SURFACE_ID_NPC_REGU))
|
||||||
bError = true;
|
bError = true;
|
||||||
if (!MakeSurface_File("TextBox", 26))
|
if (!MakeSurface_File("TextBox", SURFACE_ID_TEXT_BOX))
|
||||||
bError = true;
|
bError = true;
|
||||||
if (!MakeSurface_File("Caret", 19))
|
if (!MakeSurface_File("Caret", SURFACE_ID_CARET))
|
||||||
bError = true;
|
bError = true;
|
||||||
if (!MakeSurface_File("Bullet", 17))
|
if (!MakeSurface_File("Bullet", SURFACE_ID_BULLET))
|
||||||
bError = true;
|
bError = true;
|
||||||
if (!MakeSurface_File("Face", 27))
|
if (!MakeSurface_File("Face", SURFACE_ID_FACE))
|
||||||
bError = true;
|
bError = true;
|
||||||
if (!MakeSurface_File("Fade", 6))
|
if (!MakeSurface_File("Fade", SURFACE_ID_FADE))
|
||||||
bError = true;
|
bError = true;
|
||||||
|
|
||||||
MakeSurface_Resource("CREDIT01", 36);
|
MakeSurface_Resource("CREDIT01", SURFACE_ID_CREDITS_IMAGE);
|
||||||
|
|
||||||
if (bError)
|
if (bError)
|
||||||
{
|
{
|
||||||
|
@ -190,10 +192,10 @@ bool LoadGenericData()
|
||||||
MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_SCREEN_GRAB);
|
MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_SCREEN_GRAB);
|
||||||
MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_LEVEL_BACKGROUND);
|
MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_LEVEL_BACKGROUND);
|
||||||
MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_MAP);
|
MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_MAP);
|
||||||
MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, 37); //Unknown?
|
MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_CASTS);
|
||||||
MakeSurface_Generic(256, 256, SURFACE_ID_LEVEL_TILESET);
|
MakeSurface_Generic(256, 256, SURFACE_ID_LEVEL_TILESET);
|
||||||
MakeSurface_Generic(160, 16, SURFACE_ID_ROOM_NAME);
|
MakeSurface_Generic(160, 16, SURFACE_ID_ROOM_NAME);
|
||||||
MakeSurface_Generic(40, 240, 29); //Unknown?
|
MakeSurface_Generic(40, 240, SURFACE_ID_VALUE_VIEW);
|
||||||
MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_SPRITESET_1);
|
MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_SPRITESET_1);
|
||||||
MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_SPRITESET_2);
|
MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_SPRITESET_2);
|
||||||
MakeSurface_Generic(WINDOW_WIDTH, 16 * MAX_STRIP, SURFACE_ID_CREDIT_CAST);
|
MakeSurface_Generic(WINDOW_WIDTH, 16 * MAX_STRIP, SURFACE_ID_CREDIT_CAST);
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
bool LoadGenericData();
|
bool LoadGenericData();
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
#include "Types.h"
|
#include "Input.h"
|
||||||
#include "CommonDefines.h"
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "Input.h"
|
#include "CommonDefines.h"
|
||||||
#include "Tags.h"
|
#include "Tags.h"
|
||||||
|
#include "Types.h"
|
||||||
|
|
||||||
#define JOYSTICK_DEADZONE 10000
|
#define JOYSTICK_DEADZONE 10000
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
extern bool gbUseJoystick;
|
extern bool gbUseJoystick;
|
||||||
extern int gJoystickButtonTable[8];
|
extern int gJoystickButtonTable[8];
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "KeyControl.h"
|
#include "KeyControl.h"
|
||||||
|
|
||||||
int gKey;
|
int gKey;
|
||||||
int gKeyTrg;
|
int gKeyTrg;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
enum KEYBIND
|
enum KEYBIND
|
||||||
{
|
{
|
||||||
//The movement keys go in the order of left, right, up and down
|
//The movement keys go in the order of left, right, up and down
|
||||||
|
|
265
src/Main.cpp
265
src/Main.cpp
|
@ -1,34 +1,37 @@
|
||||||
|
#include "Main.h"
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include "Types.h"
|
|
||||||
#include "CommonDefines.h"
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string>
|
#include <string.h>
|
||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
|
#include "CommonDefines.h"
|
||||||
|
#include "Config.h"
|
||||||
#include "Draw.h"
|
#include "Draw.h"
|
||||||
#include "Input.h"
|
|
||||||
#include "Profile.h"
|
|
||||||
#include "Organya.h"
|
|
||||||
#include "Sound.h"
|
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "Generic.h"
|
#include "Generic.h"
|
||||||
#include "MyChar.h"
|
#include "Input.h"
|
||||||
#include "Main.h"
|
|
||||||
#include "Config.h"
|
|
||||||
#include "KeyControl.h"
|
#include "KeyControl.h"
|
||||||
#include "Triangle.h"
|
#include "MyChar.h"
|
||||||
|
#include "Organya.h"
|
||||||
|
#include "Profile.h"
|
||||||
#include "Resource.h"
|
#include "Resource.h"
|
||||||
|
#include "Sound.h"
|
||||||
|
#include "Triangle.h"
|
||||||
|
#include "Types.h"
|
||||||
|
|
||||||
|
// These two are defined in Draw.cpp. This is a bit of a hack.
|
||||||
|
extern SDL_Window *gWindow;
|
||||||
|
extern SDL_Renderer *gRenderer;
|
||||||
|
|
||||||
char gModulePath[PATH_LENGTH];
|
char gModulePath[PATH_LENGTH];
|
||||||
char gDataPath[PATH_LENGTH];
|
char gDataPath[PATH_LENGTH];
|
||||||
|
|
||||||
int gJoystickButtonTable[8];
|
int gJoystickButtonTable[8];
|
||||||
|
|
||||||
SDL_Window *gWindow;
|
|
||||||
SDL_Renderer *gRenderer;
|
|
||||||
|
|
||||||
bool gbUseJoystick = false;
|
bool gbUseJoystick = false;
|
||||||
bool bFps = false;
|
bool bFps = false;
|
||||||
|
|
||||||
|
@ -430,6 +433,13 @@ void JoystickProc()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define DO_KEY_PRESS(key) \
|
||||||
|
if (event.type == SDL_KEYDOWN) \
|
||||||
|
gKey |= key; \
|
||||||
|
else \
|
||||||
|
gKey &= ~key; \
|
||||||
|
break;
|
||||||
|
|
||||||
bool SystemTask()
|
bool SystemTask()
|
||||||
{
|
{
|
||||||
//Handle window events
|
//Handle window events
|
||||||
|
@ -470,186 +480,145 @@ bool SystemTask()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
|
case SDL_KEYUP:
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
//BUG FIX: Pixel relied on key codes for input, but these differ based on keyboard layout.
|
||||||
|
//This would break the alternate movement keys on typical English keyboards, since the '=' key
|
||||||
|
//is in a completely different place to where it is on a Japanese keyboard.
|
||||||
|
//To solve this, we use scancodes instead, which are based on the physical location of keys,
|
||||||
|
//rather than their meaning.
|
||||||
|
switch (event.key.keysym.scancode)
|
||||||
|
{
|
||||||
|
case SDL_SCANCODE_ESCAPE:
|
||||||
|
DO_KEY_PRESS(KEY_ESCAPE)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_W:
|
||||||
|
DO_KEY_PRESS(KEY_MAP)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_LEFT:
|
||||||
|
DO_KEY_PRESS(KEY_LEFT)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_RIGHT:
|
||||||
|
DO_KEY_PRESS(KEY_RIGHT)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_UP:
|
||||||
|
DO_KEY_PRESS(KEY_UP)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_DOWN:
|
||||||
|
DO_KEY_PRESS(KEY_DOWN)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_X:
|
||||||
|
DO_KEY_PRESS(KEY_X)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_Z:
|
||||||
|
DO_KEY_PRESS(KEY_Z)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_S:
|
||||||
|
DO_KEY_PRESS(KEY_ARMS)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_A:
|
||||||
|
DO_KEY_PRESS(KEY_ARMSREV)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_RSHIFT:
|
||||||
|
case SDL_SCANCODE_LSHIFT:
|
||||||
|
DO_KEY_PRESS(KEY_SHIFT)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_F1:
|
||||||
|
DO_KEY_PRESS(KEY_F1)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_F2:
|
||||||
|
DO_KEY_PRESS(KEY_F2)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_Q:
|
||||||
|
DO_KEY_PRESS(KEY_ITEM)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_COMMA:
|
||||||
|
DO_KEY_PRESS(KEY_ALT_LEFT)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_PERIOD:
|
||||||
|
DO_KEY_PRESS(KEY_ALT_DOWN)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_SLASH:
|
||||||
|
DO_KEY_PRESS(KEY_ALT_RIGHT)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_L:
|
||||||
|
DO_KEY_PRESS(KEY_ALT_UP)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_SEMICOLON:
|
||||||
|
DO_KEY_PRESS(KEY_PLUS)
|
||||||
|
|
||||||
|
case SDL_SCANCODE_F5:
|
||||||
|
gbUseJoystick = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#else
|
||||||
switch (event.key.keysym.sym)
|
switch (event.key.keysym.sym)
|
||||||
{
|
{
|
||||||
case SDLK_ESCAPE:
|
case SDLK_ESCAPE:
|
||||||
gKey |= KEY_ESCAPE;
|
DO_KEY_PRESS(KEY_ESCAPE)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_w:
|
case SDLK_w:
|
||||||
gKey |= KEY_MAP;
|
DO_KEY_PRESS(KEY_MAP)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_LEFT:
|
case SDLK_LEFT:
|
||||||
gKey |= KEY_LEFT;
|
DO_KEY_PRESS(KEY_LEFT)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_RIGHT:
|
case SDLK_RIGHT:
|
||||||
gKey |= KEY_RIGHT;
|
DO_KEY_PRESS(KEY_RIGHT)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_UP:
|
case SDLK_UP:
|
||||||
gKey |= KEY_UP;
|
DO_KEY_PRESS(KEY_UP)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_DOWN:
|
case SDLK_DOWN:
|
||||||
gKey |= KEY_DOWN;
|
DO_KEY_PRESS(KEY_DOWN)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_x:
|
case SDLK_x:
|
||||||
gKey |= KEY_X;
|
DO_KEY_PRESS(KEY_X)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_z:
|
case SDLK_z:
|
||||||
gKey |= KEY_Z;
|
DO_KEY_PRESS(KEY_Z)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_s:
|
case SDLK_s:
|
||||||
gKey |= KEY_ARMS;
|
DO_KEY_PRESS(KEY_ARMS)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_a:
|
case SDLK_a:
|
||||||
gKey |= KEY_ARMSREV;
|
DO_KEY_PRESS(KEY_ARMSREV)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_RSHIFT:
|
case SDLK_RSHIFT:
|
||||||
case SDLK_LSHIFT:
|
case SDLK_LSHIFT:
|
||||||
gKey |= KEY_SHIFT;
|
DO_KEY_PRESS(KEY_SHIFT)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_F1:
|
case SDLK_F1:
|
||||||
gKey |= KEY_F1;
|
DO_KEY_PRESS(KEY_F1)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_F2:
|
case SDLK_F2:
|
||||||
gKey |= KEY_F2;
|
DO_KEY_PRESS(KEY_F2)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_q:
|
case SDLK_q:
|
||||||
gKey |= KEY_ITEM;
|
DO_KEY_PRESS(KEY_ITEM)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_COMMA:
|
case SDLK_COMMA:
|
||||||
gKey |= KEY_ALT_LEFT;
|
DO_KEY_PRESS(KEY_ALT_LEFT)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_PERIOD:
|
case SDLK_PERIOD:
|
||||||
gKey |= KEY_ALT_DOWN;
|
DO_KEY_PRESS(KEY_ALT_DOWN)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_SLASH:
|
case SDLK_SLASH:
|
||||||
gKey |= KEY_ALT_RIGHT;
|
DO_KEY_PRESS(KEY_ALT_RIGHT)
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_l:
|
case SDLK_l:
|
||||||
gKey |= KEY_ALT_UP;
|
DO_KEY_PRESS(KEY_ALT_UP)
|
||||||
break;
|
|
||||||
|
|
||||||
#ifdef FIX_BUGS //BUG FIX: Pixel intended for the second alternate up key to be the plus key, Japanese keyboards have the plus key where the semi-colon key is, causing errors on other keyboard layouts)
|
|
||||||
case SDLK_PLUS:
|
|
||||||
#else
|
|
||||||
case SDLK_SEMICOLON:
|
case SDLK_SEMICOLON:
|
||||||
#endif
|
DO_KEY_PRESS(KEY_PLUS)
|
||||||
gKey |= KEY_PLUS;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_F5:
|
case SDLK_F5:
|
||||||
gbUseJoystick = false;
|
gbUseJoystick = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDL_KEYUP:
|
|
||||||
switch (event.key.keysym.sym)
|
|
||||||
{
|
|
||||||
case SDLK_ESCAPE:
|
|
||||||
gKey &= ~KEY_ESCAPE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_w:
|
|
||||||
gKey &= ~KEY_MAP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_LEFT:
|
|
||||||
gKey &= ~KEY_LEFT;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_RIGHT:
|
|
||||||
gKey &= ~KEY_RIGHT;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_UP:
|
|
||||||
gKey &= ~KEY_UP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_DOWN:
|
|
||||||
gKey &= ~KEY_DOWN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_x:
|
|
||||||
gKey &= ~KEY_X;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_z:
|
|
||||||
gKey &= ~KEY_Z;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_s:
|
|
||||||
gKey &= ~KEY_ARMS;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_a:
|
|
||||||
gKey &= ~KEY_ARMSREV;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_RSHIFT:
|
|
||||||
case SDLK_LSHIFT:
|
|
||||||
gKey &= ~KEY_SHIFT;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_F1:
|
|
||||||
gKey &= ~KEY_F1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_F2:
|
|
||||||
gKey &= ~KEY_F2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_q:
|
|
||||||
gKey &= ~KEY_ITEM;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_COMMA:
|
|
||||||
gKey &= ~KEY_ALT_LEFT;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_PERIOD:
|
|
||||||
gKey &= ~KEY_ALT_DOWN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_SLASH:
|
|
||||||
gKey &= ~KEY_ALT_RIGHT;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDLK_l:
|
|
||||||
gKey &= ~KEY_ALT_UP;
|
|
||||||
break;
|
|
||||||
|
|
||||||
#ifdef FIX_BUGS //BUG FIX: Pixel intended for the second alternate up key to be the plus key, Japanese keyboards have the plus key where the semi-colon key is, causing errors on other keyboard layouts)
|
|
||||||
case SDLK_PLUS:
|
|
||||||
#else
|
|
||||||
case SDLK_SEMICOLON:
|
|
||||||
#endif
|
|
||||||
gKey &= ~KEY_PLUS;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
void PutFramePerSecound();
|
void PutFramePerSecound();
|
||||||
int GetFramePerSecound();
|
int GetFramePerSecound();
|
||||||
|
|
41
src/Map.cpp
41
src/Map.cpp
|
@ -1,14 +1,17 @@
|
||||||
#include <stdint.h>
|
#include "Map.h"
|
||||||
#include <string>
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <SDL_rwops.h>
|
|
||||||
#include "WindowsWrapper.h"
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
#include "CommonDefines.h"
|
#include "CommonDefines.h"
|
||||||
#include "Map.h"
|
|
||||||
#include "Tags.h"
|
|
||||||
#include "Draw.h"
|
#include "Draw.h"
|
||||||
|
#include "File.h"
|
||||||
#include "NpChar.h"
|
#include "NpChar.h"
|
||||||
|
#include "Tags.h"
|
||||||
|
|
||||||
#define PXM_BUFFER_SIZE 0x4B000
|
#define PXM_BUFFER_SIZE 0x4B000
|
||||||
|
|
||||||
|
@ -27,39 +30,39 @@ bool LoadMapData2(char *path_map)
|
||||||
sprintf(path, "%s/%s", gDataPath, path_map);
|
sprintf(path, "%s/%s", gDataPath, path_map);
|
||||||
|
|
||||||
//Open file
|
//Open file
|
||||||
SDL_RWops *fp = SDL_RWFromFile(path, "rb");
|
FILE *fp = fopen(path, "rb");
|
||||||
if (!fp)
|
if (fp == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
//Make sure file begins with "PXM"
|
//Make sure file begins with "PXM"
|
||||||
char check[3];
|
char check[3];
|
||||||
fp->read(fp, check, 1, 3);
|
fread(check, 1, 3, fp);
|
||||||
|
|
||||||
if (!memcmp(check, "PXM", 3))
|
if (!memcmp(check, "PXM", 3))
|
||||||
{
|
{
|
||||||
uint8_t nul;
|
uint8_t nul;
|
||||||
fp->read(fp, &nul, 1, 1);
|
fread(&nul, 1, 1, fp);
|
||||||
|
|
||||||
//Get width and height
|
//Get width and height
|
||||||
gMap.width = SDL_ReadLE16(fp);
|
gMap.width = File_ReadLE16(fp);
|
||||||
gMap.length = SDL_ReadLE16(fp);
|
gMap.length = File_ReadLE16(fp);
|
||||||
|
|
||||||
if (gMap.data)
|
if (gMap.data)
|
||||||
{
|
{
|
||||||
//Read tiledata
|
//Read tiledata
|
||||||
fp->read(fp, gMap.data, 1, gMap.length * gMap.width);
|
fread(gMap.data, 1, gMap.length * gMap.width, fp);
|
||||||
SDL_RWclose(fp);
|
fclose(fp);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SDL_RWclose(fp);
|
fclose(fp);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SDL_RWclose(fp);
|
fclose(fp);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,13 +75,13 @@ bool LoadAttributeData(char *path_atrb)
|
||||||
char path[260];
|
char path[260];
|
||||||
sprintf(path, "%s/%s", gDataPath, path_atrb);
|
sprintf(path, "%s/%s", gDataPath, path_atrb);
|
||||||
|
|
||||||
SDL_RWops *fp = SDL_RWFromFile(path, "rb");
|
FILE *fp = fopen(path, "rb");
|
||||||
if (!fp)
|
if (fp == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
//Read data
|
//Read data
|
||||||
fp->read(fp, gMap.atrb, 1, 0x100);
|
fread(gMap.atrb, 1, 0x100, fp);
|
||||||
SDL_RWclose(fp);
|
fclose(fp);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
struct MAP_DATA
|
struct MAP_DATA
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
|
#include "MapName.h"
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string>
|
#include <string.h>
|
||||||
|
|
||||||
#include "CommonDefines.h"
|
#include "CommonDefines.h"
|
||||||
#include "MapName.h"
|
|
||||||
#include "Draw.h"
|
#include "Draw.h"
|
||||||
|
|
||||||
MAP_NAME gMapName;
|
MAP_NAME gMapName;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
struct MAP_NAME
|
struct MAP_NAME
|
||||||
{
|
{
|
||||||
int flag;
|
int flag;
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue