commit
3aed029174
7 changed files with 232 additions and 4 deletions
1
Makefile
1
Makefile
|
@ -89,6 +89,7 @@ SOURCES = \
|
||||||
Shoot \
|
Shoot \
|
||||||
Sound \
|
Sound \
|
||||||
Stage \
|
Stage \
|
||||||
|
SelStage \
|
||||||
TextScr \
|
TextScr \
|
||||||
Triangle \
|
Triangle \
|
||||||
ValueView
|
ValueView
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include "Ending.h"
|
#include "Ending.h"
|
||||||
#include "Flash.h"
|
#include "Flash.h"
|
||||||
#include "BossLife.h"
|
#include "BossLife.h"
|
||||||
|
#include "SelStage.h"
|
||||||
|
|
||||||
int g_GameFlags;
|
int g_GameFlags;
|
||||||
int gCounter;
|
int gCounter;
|
||||||
|
@ -439,7 +440,7 @@ int ModeAction()
|
||||||
InitFlash();
|
InitFlash();
|
||||||
ClearArmsData();
|
ClearArmsData();
|
||||||
ClearItemData();
|
ClearItemData();
|
||||||
//ClearPermitStage();
|
ClearPermitStage();
|
||||||
StartMapping();
|
StartMapping();
|
||||||
InitFlags();
|
InitFlags();
|
||||||
InitBossLife();
|
InitBossLife();
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "Stage.h"
|
#include "Stage.h"
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "BossLife.h"
|
#include "BossLife.h"
|
||||||
|
#include "SelStage.h"
|
||||||
|
|
||||||
const char *gDefaultName = "Profile.dat";
|
const char *gDefaultName = "Profile.dat";
|
||||||
const char *gProfileCode = "Do041220";
|
const char *gProfileCode = "Do041220";
|
||||||
|
@ -148,7 +149,7 @@ bool InitializeGame()
|
||||||
gCounter = 0;
|
gCounter = 0;
|
||||||
ClearArmsData();
|
ClearArmsData();
|
||||||
ClearItemData();
|
ClearItemData();
|
||||||
//ClearPermitStage();
|
ClearPermitStage();
|
||||||
StartMapping();
|
StartMapping();
|
||||||
InitFlags();
|
InitFlags();
|
||||||
if (!TransferStage(13, 200, 10, 8))
|
if (!TransferStage(13, 200, 10, 8))
|
||||||
|
|
197
src/SelStage.cpp
Normal file
197
src/SelStage.cpp
Normal file
|
@ -0,0 +1,197 @@
|
||||||
|
#include "SelStage.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "Draw.h"
|
||||||
|
#include "Escape.h"
|
||||||
|
#include "KeyControl.h"
|
||||||
|
#include "Main.h"
|
||||||
|
#include "TextScr.h"
|
||||||
|
#include "Sound.h"
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
|
static struct
|
||||||
|
{
|
||||||
|
int index;
|
||||||
|
int event;
|
||||||
|
} gPermitStage[8];
|
||||||
|
|
||||||
|
static int gSelectedStage;
|
||||||
|
static int gStageSelectTitleY;
|
||||||
|
|
||||||
|
void ClearPermitStage(void)
|
||||||
|
{
|
||||||
|
memset(gPermitStage, 0, 0x40);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AddPermitStage(int index, int event)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 8; ++i)
|
||||||
|
{
|
||||||
|
if (gPermitStage[i].index == 0 || gPermitStage[i].index == index)
|
||||||
|
{
|
||||||
|
gPermitStage[i].index = index;
|
||||||
|
gPermitStage[i].event = event;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SubPermitStage(int index)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < 8 && gPermitStage[i].index != index; ++i);
|
||||||
|
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
if (i != 8)
|
||||||
|
#else
|
||||||
|
if (i != 32)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
int ia;
|
||||||
|
for (ia = i + 1; ia < 8; ++ia)
|
||||||
|
{
|
||||||
|
gPermitStage[ia - 1].index = gPermitStage[ia].index;
|
||||||
|
gPermitStage[ia - 1].event = gPermitStage[ia].event;
|
||||||
|
}
|
||||||
|
|
||||||
|
gPermitStage[ia - 1].index = 0;
|
||||||
|
gPermitStage[ia - 1].event = 0;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoveStageSelectCursor(void)
|
||||||
|
{
|
||||||
|
int stage_num;
|
||||||
|
for (stage_num = 0; gPermitStage[stage_num].index != 0; ++stage_num);
|
||||||
|
|
||||||
|
if (stage_num)
|
||||||
|
{
|
||||||
|
if (gKeyTrg & gKeyLeft)
|
||||||
|
--gSelectedStage;
|
||||||
|
|
||||||
|
if (gKeyTrg & gKeyRight)
|
||||||
|
++gSelectedStage;
|
||||||
|
|
||||||
|
if (gSelectedStage < 0)
|
||||||
|
gSelectedStage = stage_num - 1;
|
||||||
|
|
||||||
|
if (stage_num - 1 < gSelectedStage)
|
||||||
|
gSelectedStage = 0;
|
||||||
|
|
||||||
|
if ((gKeyRight | gKeyLeft) & gKeyTrg)
|
||||||
|
StartTextScript(gPermitStage[gSelectedStage].index + 1000);
|
||||||
|
|
||||||
|
if ((gKeyRight | gKeyLeft) & gKeyTrg)
|
||||||
|
PlaySoundObject(1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PutStageSelectObject(void)
|
||||||
|
{
|
||||||
|
static unsigned int flash;
|
||||||
|
|
||||||
|
RECT rcView;
|
||||||
|
RECT rcCur[2];
|
||||||
|
RECT rcTitle1;
|
||||||
|
|
||||||
|
rcView = {0, 0, 320, 240};
|
||||||
|
rcCur[0] = {80, 88, 112, 104};
|
||||||
|
rcCur[1] = {80, 104, 112, 120};
|
||||||
|
rcTitle1 = {80, 64, 144, 72};
|
||||||
|
|
||||||
|
if (gStageSelectTitleY > 46)
|
||||||
|
--gStageSelectTitleY;
|
||||||
|
|
||||||
|
PutBitmap3(&rcView, 128, gStageSelectTitleY, &rcTitle1, SURFACE_ID_TEXT_BOX);
|
||||||
|
|
||||||
|
int stage_num;
|
||||||
|
for (stage_num = 0; gPermitStage[stage_num].index; ++stage_num);
|
||||||
|
|
||||||
|
++flash;
|
||||||
|
|
||||||
|
if (stage_num)
|
||||||
|
{
|
||||||
|
int stage_x = (320 - 40 * stage_num) / 2;
|
||||||
|
|
||||||
|
PutBitmap3(&rcView, stage_x + 40 * gSelectedStage, 64, &rcCur[(flash >> 1) % 2], SURFACE_ID_TEXT_BOX);
|
||||||
|
|
||||||
|
for (int i = 0; i < 8 && gPermitStage[i].index; ++i)
|
||||||
|
{
|
||||||
|
RECT rcStage;
|
||||||
|
rcStage.left = 32 * (gPermitStage[i].index % 8);
|
||||||
|
rcStage.right = rcStage.left + 32;
|
||||||
|
rcStage.top = 16 * (gPermitStage[i].index / 8);
|
||||||
|
rcStage.bottom = rcStage.top + 16;
|
||||||
|
|
||||||
|
PutBitmap3(&rcView, stage_x + 40 * i, 64, &rcStage, SURFACE_ID_STAGE_ITEM);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int StageSelectLoop(int *p_event)
|
||||||
|
{
|
||||||
|
char old_script_path[260];
|
||||||
|
|
||||||
|
RECT rcView = {0, 0, 320, 240};
|
||||||
|
|
||||||
|
gSelectedStage = 0;
|
||||||
|
BackupSurface(10, &grcFull);
|
||||||
|
GetTextScriptPath(old_script_path);
|
||||||
|
LoadTextScript2("StageSelect.tsc");
|
||||||
|
gStageSelectTitleY = 54;
|
||||||
|
StartTextScript(gPermitStage[gSelectedStage].index + 1000);
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
GetTrg();
|
||||||
|
|
||||||
|
if (gKey & KEY_ESCAPE)
|
||||||
|
{
|
||||||
|
int escRet = Call_Escape();
|
||||||
|
if (escRet == 0)
|
||||||
|
return 0;
|
||||||
|
if (escRet == 2)
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
MoveStageSelectCursor();
|
||||||
|
|
||||||
|
int tscRet = TextScriptProc();
|
||||||
|
if (tscRet == 0)
|
||||||
|
return 0;
|
||||||
|
if (tscRet == 2)
|
||||||
|
return 2;
|
||||||
|
|
||||||
|
PutBitmap3(&rcView, 0, 0, &rcView, 10);
|
||||||
|
PutStageSelectObject();
|
||||||
|
PutTextScript();
|
||||||
|
|
||||||
|
if (gKeyTrg & gKeyOk)
|
||||||
|
{
|
||||||
|
StopTextScript();
|
||||||
|
LoadTextScript_Stage(old_script_path);
|
||||||
|
*p_event = gPermitStage[gSelectedStage].event;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gKeyTrg & gKeyCancel)
|
||||||
|
{
|
||||||
|
StopTextScript();
|
||||||
|
LoadTextScript_Stage(old_script_path);
|
||||||
|
*p_event = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
PutFramePerSecound();
|
||||||
|
}
|
||||||
|
while (Flip_SystemTask());
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
8
src/SelStage.h
Normal file
8
src/SelStage.h
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
void ClearPermitStage(void);
|
||||||
|
bool AddPermitStage(int index, int event);
|
||||||
|
bool SubPermitStage(int index);
|
||||||
|
void MoveStageSelectCursor(void);
|
||||||
|
void PutStageSelectObject(void);
|
||||||
|
int StageSelectLoop(int *p_event);
|
|
@ -25,6 +25,7 @@
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "Map.h"
|
#include "Map.h"
|
||||||
#include "BossLife.h"
|
#include "BossLife.h"
|
||||||
|
#include "SelStage.h"
|
||||||
|
|
||||||
#define IS_COMMAND(c1, c2, c3) gTS.data[gTS.p_read + 1] == c1 && gTS.data[gTS.p_read + 2] == c2 && gTS.data[gTS.p_read + 3] == c3
|
#define IS_COMMAND(c1, c2, c3) gTS.data[gTS.p_read + 1] == c1 && gTS.data[gTS.p_read + 2] == c2 && gTS.data[gTS.p_read + 3] == c3
|
||||||
|
|
||||||
|
@ -86,7 +87,7 @@ void EncryptionBinaryData2(uint8_t *pData, int size)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Load generic .tsc
|
//Load generic .tsc
|
||||||
bool LoadTextScript2(char *name)
|
bool LoadTextScript2(const char *name)
|
||||||
{
|
{
|
||||||
//Get path
|
//Get path
|
||||||
char path[260];
|
char path[260];
|
||||||
|
@ -671,6 +672,12 @@ int TextScriptProc()
|
||||||
SubArmsData(z);
|
SubArmsData(z);
|
||||||
gTS.p_read += 8;
|
gTS.p_read += 8;
|
||||||
}
|
}
|
||||||
|
else if (IS_COMMAND('P','S','+'))
|
||||||
|
{
|
||||||
|
x = GetTextScriptNo(gTS.p_read + 4);
|
||||||
|
y = GetTextScriptNo(gTS.p_read + 9);
|
||||||
|
AddPermitStage(x, y);
|
||||||
|
gTS.p_read += 13;
|
||||||
else if (IS_COMMAND('M','P','+'))
|
else if (IS_COMMAND('M','P','+'))
|
||||||
{
|
{
|
||||||
x = GetTextScriptNo(gTS.p_read + 4);
|
x = GetTextScriptNo(gTS.p_read + 4);
|
||||||
|
@ -1001,6 +1008,19 @@ int TextScriptProc()
|
||||||
if (tscRet == 2)
|
if (tscRet == 2)
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
else if (IS_COMMAND('S','L','P'))
|
||||||
|
{
|
||||||
|
bExit = true;
|
||||||
|
|
||||||
|
int selRet = StageSelectLoop(&z);
|
||||||
|
if (selRet == 0)
|
||||||
|
return 0;
|
||||||
|
if (selRet == 2)
|
||||||
|
return 2;
|
||||||
|
|
||||||
|
JumpTextScript(z);
|
||||||
|
g_GameFlags &= ~3;
|
||||||
|
}
|
||||||
else if (IS_COMMAND('D','N','P'))
|
else if (IS_COMMAND('D','N','P'))
|
||||||
{
|
{
|
||||||
z = GetTextScriptNo(gTS.p_read + 4);
|
z = GetTextScriptNo(gTS.p_read + 4);
|
||||||
|
|
|
@ -57,7 +57,7 @@ struct TEXT_SCRIPT
|
||||||
bool InitTextScript2();
|
bool InitTextScript2();
|
||||||
void EndTextScript();
|
void EndTextScript();
|
||||||
void EncryptionBinaryData2(uint8_t *pData, int size);
|
void EncryptionBinaryData2(uint8_t *pData, int size);
|
||||||
bool LoadTextScript2(char *name);
|
bool LoadTextScript2(const char *name);
|
||||||
bool LoadTextScript_Stage(char *name);
|
bool LoadTextScript_Stage(char *name);
|
||||||
void GetTextScriptPath(char *path);
|
void GetTextScriptPath(char *path);
|
||||||
bool StartTextScript(int no);
|
bool StartTextScript(int no);
|
||||||
|
|
Loading…
Add table
Reference in a new issue