Made SelStage.cpp ASM-accurate
This commit is contained in:
parent
c9d5b3d03a
commit
e1d3898d59
3 changed files with 116 additions and 68 deletions
|
@ -962,6 +962,30 @@ addr = 0x41D260
|
||||||
name = "InitializeGame"
|
name = "InitializeGame"
|
||||||
addr = 0x41D550
|
addr = 0x41D550
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "ClearPermitStage"
|
||||||
|
addr = 0x41D610
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "AddPermitStage"
|
||||||
|
addr = 0x41D630
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "SubPermitStage"
|
||||||
|
addr = 0x41D6A0
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "MoveStageSelectCursor"
|
||||||
|
addr = 0x41D740
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "PutStageSelectObject"
|
||||||
|
addr = 0x41D840
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "StageSelectLoop"
|
||||||
|
addr = 0x41DA00
|
||||||
|
|
||||||
[[func]]
|
[[func]]
|
||||||
name = "ShootBullet_Frontia1"
|
name = "ShootBullet_Frontia1"
|
||||||
addr = 0x41DBD0
|
addr = 0x41DBD0
|
||||||
|
|
124
src/SelStage.cpp
124
src/SelStage.cpp
|
@ -21,55 +21,65 @@ void ClearPermitStage(void)
|
||||||
memset(gPermitStage, 0, 0x40);
|
memset(gPermitStage, 0, 0x40);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AddPermitStage(int index, int event)
|
BOOL AddPermitStage(int index, int event)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 8; ++i)
|
int i = 0;
|
||||||
{
|
while (i < 8)
|
||||||
if (gPermitStage[i].index == 0 || gPermitStage[i].index == index)
|
|
||||||
{
|
{
|
||||||
|
if (gPermitStage[i].index == index)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (gPermitStage[i].index == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == 8)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
gPermitStage[i].index = index;
|
gPermitStage[i].index = index;
|
||||||
gPermitStage[i].event = event;
|
gPermitStage[i].event = event;
|
||||||
return true;
|
|
||||||
}
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
BOOL SubPermitStage(int index)
|
||||||
}
|
|
||||||
|
|
||||||
bool SubPermitStage(int index)
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < 8 && gPermitStage[i].index != index; ++i);
|
for (i = 0; i < 8; ++i)
|
||||||
|
if (gPermitStage[i].index == index)
|
||||||
|
break;
|
||||||
|
|
||||||
#ifdef FIX_BUGS
|
#ifdef FIX_BUGS
|
||||||
if (i != 8)
|
if (i == 8)
|
||||||
#else
|
#else
|
||||||
if (i != 32)
|
if (i == 32)
|
||||||
#endif
|
#endif
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
for (i += 1; i < 8; ++i)
|
||||||
{
|
{
|
||||||
int ia;
|
gPermitStage[i - 1] = gPermitStage[i];
|
||||||
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[i - 1].index = 0;
|
||||||
gPermitStage[ia - 1].event = 0;
|
gPermitStage[i - 1].event = 0;
|
||||||
|
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveStageSelectCursor(void)
|
void MoveStageSelectCursor(void)
|
||||||
{
|
{
|
||||||
int stage_num;
|
int stage_num = 0;
|
||||||
for (stage_num = 0; gPermitStage[stage_num].index != 0; ++stage_num);
|
while (gPermitStage[stage_num].index != 0)
|
||||||
|
++stage_num;
|
||||||
|
|
||||||
|
int stage_x = (WINDOW_WIDTH - 40 * stage_num) / 2; // Unused
|
||||||
|
|
||||||
|
if (stage_num == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
if (stage_num)
|
|
||||||
{
|
|
||||||
if (gKeyTrg & gKeyLeft)
|
if (gKeyTrg & gKeyLeft)
|
||||||
--gSelectedStage;
|
--gSelectedStage;
|
||||||
|
|
||||||
|
@ -79,16 +89,15 @@ void MoveStageSelectCursor(void)
|
||||||
if (gSelectedStage < 0)
|
if (gSelectedStage < 0)
|
||||||
gSelectedStage = stage_num - 1;
|
gSelectedStage = stage_num - 1;
|
||||||
|
|
||||||
if (stage_num - 1 < gSelectedStage)
|
if (gSelectedStage > stage_num - 1)
|
||||||
gSelectedStage = 0;
|
gSelectedStage = 0;
|
||||||
|
|
||||||
if ((gKeyRight | gKeyLeft) & gKeyTrg)
|
if ((gKeyLeft | gKeyRight) & gKeyTrg)
|
||||||
StartTextScript(gPermitStage[gSelectedStage].index + 1000);
|
StartTextScript(gPermitStage[gSelectedStage].index + 1000);
|
||||||
|
|
||||||
if ((gKeyRight | gKeyLeft) & gKeyTrg)
|
if ((gKeyLeft | gKeyRight) & gKeyTrg)
|
||||||
PlaySoundObject(1, 1);
|
PlaySoundObject(1, 1);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void PutStageSelectObject(void)
|
void PutStageSelectObject(void)
|
||||||
{
|
{
|
||||||
|
@ -103,25 +112,33 @@ void PutStageSelectObject(void)
|
||||||
|
|
||||||
RECT rcTitle1 = {80, 64, 144, 72};
|
RECT rcTitle1 = {80, 64, 144, 72};
|
||||||
|
|
||||||
|
int i;
|
||||||
|
int stage_num;
|
||||||
|
int stage_x;
|
||||||
|
RECT rcStage;
|
||||||
|
|
||||||
if (gStageSelectTitleY > (WINDOW_HEIGHT / 2) - 74)
|
if (gStageSelectTitleY > (WINDOW_HEIGHT / 2) - 74)
|
||||||
--gStageSelectTitleY;
|
--gStageSelectTitleY;
|
||||||
|
|
||||||
PutBitmap3(&rcView, (WINDOW_WIDTH / 2) - 32, gStageSelectTitleY, &rcTitle1, SURFACE_ID_TEXT_BOX);
|
PutBitmap3(&rcView, (WINDOW_WIDTH / 2) - 32, gStageSelectTitleY, &rcTitle1, SURFACE_ID_TEXT_BOX);
|
||||||
|
|
||||||
int stage_num;
|
stage_num = 0;
|
||||||
for (stage_num = 0; gPermitStage[stage_num].index; ++stage_num);
|
while (gPermitStage[stage_num].index)
|
||||||
|
++stage_num;
|
||||||
|
|
||||||
++flash;
|
++flash;
|
||||||
|
|
||||||
if (stage_num)
|
if (stage_num)
|
||||||
{
|
{
|
||||||
int stage_x = (WINDOW_WIDTH - 40 * stage_num) / 2;
|
stage_x = (WINDOW_WIDTH - 40 * stage_num) / 2;
|
||||||
|
|
||||||
PutBitmap3(&rcView, stage_x + 40 * gSelectedStage, (WINDOW_HEIGHT / 2) - 56, &rcCur[(flash >> 1) % 2], SURFACE_ID_TEXT_BOX);
|
PutBitmap3(&rcView, stage_x + 40 * gSelectedStage, (WINDOW_HEIGHT / 2) - 56, &rcCur[(flash >> 1) % 2], SURFACE_ID_TEXT_BOX);
|
||||||
|
|
||||||
for (int i = 0; i < 8 && gPermitStage[i].index; ++i)
|
for (i = 0; i < 8; ++i)
|
||||||
{
|
{
|
||||||
RECT rcStage;
|
if (gPermitStage[i].index == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
rcStage.left = 32 * (gPermitStage[i].index % 8);
|
rcStage.left = 32 * (gPermitStage[i].index % 8);
|
||||||
rcStage.right = rcStage.left + 32;
|
rcStage.right = rcStage.left + 32;
|
||||||
rcStage.top = 16 * (gPermitStage[i].index / 8);
|
rcStage.top = 16 * (gPermitStage[i].index / 8);
|
||||||
|
@ -145,26 +162,30 @@ int StageSelectLoop(int *p_event)
|
||||||
gStageSelectTitleY = (WINDOW_HEIGHT / 2) - 66;
|
gStageSelectTitleY = (WINDOW_HEIGHT / 2) - 66;
|
||||||
StartTextScript(gPermitStage[gSelectedStage].index + 1000);
|
StartTextScript(gPermitStage[gSelectedStage].index + 1000);
|
||||||
|
|
||||||
do
|
for (;;)
|
||||||
{
|
{
|
||||||
GetTrg();
|
GetTrg();
|
||||||
|
|
||||||
if (gKey & KEY_ESCAPE)
|
if (gKey & KEY_ESCAPE)
|
||||||
{
|
{
|
||||||
int escRet = Call_Escape(ghWnd);
|
switch (Call_Escape(ghWnd))
|
||||||
if (escRet == 0)
|
{
|
||||||
|
case 0:
|
||||||
return 0;
|
return 0;
|
||||||
if (escRet == 2)
|
case 2:
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MoveStageSelectCursor();
|
MoveStageSelectCursor();
|
||||||
|
|
||||||
int tscRet = TextScriptProc();
|
switch (TextScriptProc())
|
||||||
if (tscRet == 0)
|
{
|
||||||
|
case 0:
|
||||||
return 0;
|
return 0;
|
||||||
if (tscRet == 2)
|
case 2:
|
||||||
return 2;
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef FIX_BUGS
|
#ifdef FIX_BUGS
|
||||||
PutBitmap4(&rcView, 0, 0, &rcView, SURFACE_ID_SCREEN_GRAB);
|
PutBitmap4(&rcView, 0, 0, &rcView, SURFACE_ID_SCREEN_GRAB);
|
||||||
|
@ -178,12 +199,9 @@ int StageSelectLoop(int *p_event)
|
||||||
if (gKeyTrg & gKeyOk)
|
if (gKeyTrg & gKeyOk)
|
||||||
{
|
{
|
||||||
StopTextScript();
|
StopTextScript();
|
||||||
LoadTextScript_Stage(old_script_path);
|
break;
|
||||||
*p_event = gPermitStage[gSelectedStage].event;
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
else if (gKeyTrg & gKeyCancel)
|
||||||
if (gKeyTrg & gKeyCancel)
|
|
||||||
{
|
{
|
||||||
StopTextScript();
|
StopTextScript();
|
||||||
LoadTextScript_Stage(old_script_path);
|
LoadTextScript_Stage(old_script_path);
|
||||||
|
@ -192,8 +210,12 @@ int StageSelectLoop(int *p_event)
|
||||||
}
|
}
|
||||||
|
|
||||||
PutFramePerSecound();
|
PutFramePerSecound();
|
||||||
}
|
|
||||||
while (Flip_SystemTask(ghWnd));
|
|
||||||
|
|
||||||
|
if (!Flip_SystemTask(ghWnd))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LoadTextScript_Stage(old_script_path);
|
||||||
|
*p_event = gPermitStage[gSelectedStage].event;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
struct PERMIT_STAGE
|
struct PERMIT_STAGE
|
||||||
{
|
{
|
||||||
int index;
|
int index;
|
||||||
|
@ -9,8 +11,8 @@ struct PERMIT_STAGE
|
||||||
extern PERMIT_STAGE gPermitStage[8];
|
extern PERMIT_STAGE gPermitStage[8];
|
||||||
|
|
||||||
void ClearPermitStage(void);
|
void ClearPermitStage(void);
|
||||||
bool AddPermitStage(int index, int event);
|
BOOL AddPermitStage(int index, int event);
|
||||||
bool SubPermitStage(int index);
|
BOOL SubPermitStage(int index);
|
||||||
void MoveStageSelectCursor(void);
|
void MoveStageSelectCursor(void);
|
||||||
void PutStageSelectObject(void);
|
void PutStageSelectObject(void);
|
||||||
int StageSelectLoop(int *p_event);
|
int StageSelectLoop(int *p_event);
|
||||||
|
|
Loading…
Add table
Reference in a new issue