Merge branch 'master' into addBetterMakefileDebugFlags
This commit is contained in:
commit
54ee8d1347
23 changed files with 263 additions and 223 deletions
|
@ -11,6 +11,14 @@ name = "InitBack"
|
||||||
addr = 0x402270
|
addr = 0x402270
|
||||||
size = 0x100
|
size = 0x100
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "ActBack"
|
||||||
|
addr = 0x402370
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "PutBack"
|
||||||
|
addr = 0x4023D0
|
||||||
|
|
||||||
[[func]]
|
[[func]]
|
||||||
name = "PutFront"
|
name = "PutFront"
|
||||||
addr = 0x402830
|
addr = 0x402830
|
||||||
|
@ -271,6 +279,14 @@ addr = 0x40ABC0
|
||||||
name = "SetCaret"
|
name = "SetCaret"
|
||||||
addr = 0x40AC90
|
addr = 0x40AC90
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "LoadConfigData"
|
||||||
|
addr = 0x40AD60
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "DefaultConfigData"
|
||||||
|
addr = 0x40AE30
|
||||||
|
|
||||||
[[func]]
|
[[func]]
|
||||||
name = "Call_Escape"
|
name = "Call_Escape"
|
||||||
addr = 0x40DD70
|
addr = 0x40DD70
|
||||||
|
@ -606,6 +622,18 @@ addr = 0x41FE70
|
||||||
name = "PlaySoundObject"
|
name = "PlaySoundObject"
|
||||||
addr = 0x420640
|
addr = 0x420640
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "TransferStage"
|
||||||
|
addr = 0x420BE0
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "ChangeMusic"
|
||||||
|
addr = 0x420EE0
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "ReCallMusic"
|
||||||
|
addr = 0x420F50
|
||||||
|
|
||||||
[[func]]
|
[[func]]
|
||||||
name = "InitStar"
|
name = "InitStar"
|
||||||
addr = 0x420FA0
|
addr = 0x420FA0
|
||||||
|
|
|
@ -158,9 +158,9 @@ void MoveCampCursor()
|
||||||
{
|
{
|
||||||
int arms_num = 0;
|
int arms_num = 0;
|
||||||
int item_num = 0;
|
int item_num = 0;
|
||||||
while ( gArmsData[arms_num].code != 0 )
|
while (gArmsData[arms_num].code != 0)
|
||||||
++arms_num;
|
++arms_num;
|
||||||
while ( gItemData[item_num].code != 0 )
|
while (gItemData[item_num].code != 0)
|
||||||
++item_num;
|
++item_num;
|
||||||
|
|
||||||
if (arms_num == 0 && item_num == 0)
|
if (arms_num == 0 && item_num == 0)
|
||||||
|
@ -228,9 +228,9 @@ void MoveCampCursor()
|
||||||
bChange = TRUE;
|
bChange = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( gKeyTrg & gKeyDown )
|
if (gKeyTrg & gKeyDown)
|
||||||
{
|
{
|
||||||
if ( gSelectedItem / 6 == (item_num - 1) / 6 )
|
if (gSelectedItem / 6 == (item_num - 1) / 6)
|
||||||
gCampActive = FALSE;
|
gCampActive = FALSE;
|
||||||
else
|
else
|
||||||
gSelectedItem += 6;
|
gSelectedItem += 6;
|
||||||
|
@ -325,7 +325,7 @@ void PutCampObject()
|
||||||
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
|
||||||
if ( gArmsData[i].max_num )
|
if (gArmsData[i].max_num)
|
||||||
{
|
{
|
||||||
PutNumber4(40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 144) / 2, gArmsData[i].num, 0);
|
PutNumber4(40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 144) / 2, gArmsData[i].num, 0);
|
||||||
PutNumber4(40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 128) / 2, gArmsData[i].max_num, 0);
|
PutNumber4(40 * i + (WINDOW_WIDTH - 224) / 2, (WINDOW_HEIGHT - 128) / 2, gArmsData[i].max_num, 0);
|
||||||
|
|
38
src/Back.cpp
38
src/Back.cpp
|
@ -21,7 +21,7 @@ BOOL InitBack(const char *fName, int type)
|
||||||
// Unused, hilariously
|
// Unused, hilariously
|
||||||
color_black = GetCortBoxColor(RGB(0, 0, 0x10));
|
color_black = GetCortBoxColor(RGB(0, 0, 0x10));
|
||||||
|
|
||||||
//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);
|
||||||
|
|
||||||
|
@ -38,8 +38,8 @@ BOOL InitBack(const char *fName, int type)
|
||||||
// This is ridiculously platform-dependant:
|
// This is ridiculously platform-dependant:
|
||||||
// It should break on big-endian CPUs, and platforms
|
// It should break on big-endian CPUs, and platforms
|
||||||
// where short isn't 16-bit and long isn't 32-bit.
|
// where short isn't 16-bit and long isn't 32-bit.
|
||||||
short bmp_header_buffer[7];
|
unsigned short bmp_header_buffer[7]; // These names aren't the original. This ruins the stack frame layout.
|
||||||
long bmp_header_buffer2[10];
|
unsigned long bmp_header_buffer2[10];
|
||||||
|
|
||||||
fread(bmp_header_buffer, 14, 1, fp);
|
fread(bmp_header_buffer, 14, 1, fp);
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ BOOL InitBack(const char *fName, int type)
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
#endif
|
#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;
|
||||||
|
@ -138,7 +138,7 @@ void PutBack(int fx, int fy)
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
case 7:
|
case 7:
|
||||||
//Sky
|
// Sky
|
||||||
static unsigned int fillNext;
|
static unsigned int fillNext;
|
||||||
fillNext = 0;
|
fillNext = 0;
|
||||||
for (int y = 0; y < WINDOW_HEIGHT - 240 + 88; y += 88)
|
for (int y = 0; y < WINDOW_HEIGHT - 240 + 88; y += 88)
|
||||||
|
@ -156,7 +156,7 @@ void PutBack(int fx, int fy)
|
||||||
rect.right = 320;
|
rect.right = 320;
|
||||||
PutBitmap4(&grcGame, (WINDOW_WIDTH - 320) / 2, WINDOW_HEIGHT - 240, &rect, SURFACE_ID_LEVEL_BACKGROUND);
|
PutBitmap4(&grcGame, (WINDOW_WIDTH - 320) / 2, WINDOW_HEIGHT - 240, &rect, SURFACE_ID_LEVEL_BACKGROUND);
|
||||||
|
|
||||||
//Cloud layer 1
|
// Cloud layer 1
|
||||||
rect.top = 88;
|
rect.top = 88;
|
||||||
rect.bottom = 123;
|
rect.bottom = 123;
|
||||||
rect.left = gBack.fx / 2;
|
rect.left = gBack.fx / 2;
|
||||||
|
@ -167,7 +167,7 @@ void PutBack(int fx, int fy)
|
||||||
for (int i = 0; i < ((WINDOW_WIDTH - 1) / 320) + 1; i++)
|
for (int i = 0; i < ((WINDOW_WIDTH - 1) / 320) + 1; i++)
|
||||||
PutBitmap4(&grcGame, (320 * (i + 1)) - gBack.fx / 2 % 320, 88 + (WINDOW_HEIGHT - 240), &rect, SURFACE_ID_LEVEL_BACKGROUND);
|
PutBitmap4(&grcGame, (320 * (i + 1)) - gBack.fx / 2 % 320, 88 + (WINDOW_HEIGHT - 240), &rect, SURFACE_ID_LEVEL_BACKGROUND);
|
||||||
|
|
||||||
//Cloud layer 2
|
// Cloud layer 2
|
||||||
rect.top = 123;
|
rect.top = 123;
|
||||||
rect.bottom = 146;
|
rect.bottom = 146;
|
||||||
rect.left = gBack.fx % 320;
|
rect.left = gBack.fx % 320;
|
||||||
|
@ -178,7 +178,7 @@ void PutBack(int fx, int fy)
|
||||||
for (int i = 0; i < ((WINDOW_WIDTH - 1) / 320) + 1; i++)
|
for (int i = 0; i < ((WINDOW_WIDTH - 1) / 320) + 1; i++)
|
||||||
PutBitmap4(&grcGame, (320 * (i + 1)) - gBack.fx % 320, 123 + (WINDOW_HEIGHT - 240), &rect, SURFACE_ID_LEVEL_BACKGROUND);
|
PutBitmap4(&grcGame, (320 * (i + 1)) - gBack.fx % 320, 123 + (WINDOW_HEIGHT - 240), &rect, SURFACE_ID_LEVEL_BACKGROUND);
|
||||||
|
|
||||||
//Cloud layer 3
|
// Cloud layer 3
|
||||||
rect.top = 146;
|
rect.top = 146;
|
||||||
rect.bottom = 176;
|
rect.bottom = 176;
|
||||||
rect.left = 2 * gBack.fx % 320;
|
rect.left = 2 * gBack.fx % 320;
|
||||||
|
@ -189,7 +189,7 @@ void PutBack(int fx, int fy)
|
||||||
for (int i = 0; i < ((WINDOW_WIDTH - 1) / 320) + 1; i++)
|
for (int i = 0; i < ((WINDOW_WIDTH - 1) / 320) + 1; i++)
|
||||||
PutBitmap4(&grcGame, (320 * (i + 1)) - 2 * gBack.fx % 320, 146 + (WINDOW_HEIGHT - 240), &rect, SURFACE_ID_LEVEL_BACKGROUND);
|
PutBitmap4(&grcGame, (320 * (i + 1)) - 2 * gBack.fx % 320, 146 + (WINDOW_HEIGHT - 240), &rect, SURFACE_ID_LEVEL_BACKGROUND);
|
||||||
|
|
||||||
//Cloud layer 4
|
// Cloud layer 4
|
||||||
rect.top = 176;
|
rect.top = 176;
|
||||||
rect.bottom = 240;
|
rect.bottom = 240;
|
||||||
rect.left = 4 * gBack.fx % 320;
|
rect.left = 4 * gBack.fx % 320;
|
||||||
|
@ -248,49 +248,49 @@ void PutFront(int fx, int fy)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Draw black bars
|
// Draw black bars
|
||||||
if (!(g_GameFlags & 8)) //Detect if credits are running
|
if (!(g_GameFlags & 8)) // Detect if credits are running
|
||||||
{
|
{
|
||||||
const bool fromFocus = (gStageNo == 31); //Get if we should only draw around a 320x240 area of the focus point
|
const bool fromFocus = (gStageNo == 31); // Get if we should only draw around a 320x240 area of the focus point
|
||||||
|
|
||||||
//Get focus rect
|
// Get focus rect
|
||||||
int focusX = gFrame.x + (WINDOW_WIDTH << 8) - (320 << 8);
|
int focusX = gFrame.x + (WINDOW_WIDTH << 8) - (320 << 8);
|
||||||
int focusY = gFrame.y + (WINDOW_HEIGHT << 8) - (240 << 8);
|
int focusY = gFrame.y + (WINDOW_HEIGHT << 8) - (240 << 8);
|
||||||
int focusR = focusX + (320 << 9);
|
int focusR = focusX + (320 << 9);
|
||||||
int focusB = focusY + (240 << 9);
|
int focusB = focusY + (240 << 9);
|
||||||
|
|
||||||
//Get borders
|
// Get borders
|
||||||
const int barLeft = fromFocus ? focusX : -0x1000;
|
const int barLeft = fromFocus ? focusX : -0x1000;
|
||||||
const int barTop = fromFocus ? focusY : -0x1000;
|
const int barTop = fromFocus ? focusY : -0x1000;
|
||||||
|
|
||||||
const int barRight = fromFocus ? focusR : (gMap.width << 13) - 0x1000;
|
const int barRight = fromFocus ? focusR : (gMap.width << 13) - 0x1000;
|
||||||
const int barBottom = fromFocus ? focusB : (gMap.length << 13) - 0x1000;
|
const int barBottom = fromFocus ? focusB : (gMap.length << 13) - 0x1000;
|
||||||
|
|
||||||
//Draw bars
|
// Draw bars
|
||||||
RECT barRect;
|
RECT barRect;
|
||||||
|
|
||||||
//Left
|
// Left
|
||||||
barRect.left = 0;
|
barRect.left = 0;
|
||||||
barRect.top = 0;
|
barRect.top = 0;
|
||||||
barRect.right = (barLeft - gFrame.x) >> 9;
|
barRect.right = (barLeft - gFrame.x) >> 9;
|
||||||
barRect.bottom = WINDOW_HEIGHT;
|
barRect.bottom = WINDOW_HEIGHT;
|
||||||
CortBox(&barRect, 0x000000);
|
CortBox(&barRect, 0x000000);
|
||||||
|
|
||||||
//Top
|
// Top
|
||||||
barRect.left = 0;
|
barRect.left = 0;
|
||||||
barRect.top = 0;
|
barRect.top = 0;
|
||||||
barRect.right = WINDOW_WIDTH;
|
barRect.right = WINDOW_WIDTH;
|
||||||
barRect.bottom = (barTop - gFrame.y) >> 9;
|
barRect.bottom = (barTop - gFrame.y) >> 9;
|
||||||
CortBox(&barRect, 0x000000);
|
CortBox(&barRect, 0x000000);
|
||||||
|
|
||||||
//Right
|
// Right
|
||||||
barRect.left = (barRight - gFrame.x) >> 9;
|
barRect.left = (barRight - gFrame.x) >> 9;
|
||||||
barRect.top = 0;
|
barRect.top = 0;
|
||||||
barRect.right = WINDOW_WIDTH;
|
barRect.right = WINDOW_WIDTH;
|
||||||
barRect.bottom = WINDOW_HEIGHT;
|
barRect.bottom = WINDOW_HEIGHT;
|
||||||
CortBox(&barRect, 0x000000);
|
CortBox(&barRect, 0x000000);
|
||||||
|
|
||||||
//Bottom
|
// Bottom
|
||||||
barRect.left = 0;
|
barRect.left = 0;
|
||||||
barRect.top = (barBottom - gFrame.y) >> 9;
|
barRect.top = (barBottom - gFrame.y) >> 9;
|
||||||
barRect.right = WINDOW_WIDTH;
|
barRect.right = WINDOW_WIDTH;
|
||||||
|
|
|
@ -97,7 +97,7 @@ void HitBossBullet()
|
||||||
if (gBul[bul].damage == -1)
|
if (gBul[bul].damage == -1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
//Check if bullet touches boss
|
// Check if bullet touches boss
|
||||||
bHit = FALSE;
|
bHit = FALSE;
|
||||||
if (gBoss[bos].bits & npc_shootable
|
if (gBoss[bos].bits & npc_shootable
|
||||||
&& gBoss[bos].x - gBoss[bos].hit.back < gBul[bul].x + gBul[bul].enemyXL
|
&& gBoss[bos].x - gBoss[bos].hit.back < gBul[bul].x + gBul[bul].enemyXL
|
||||||
|
@ -114,7 +114,7 @@ void HitBossBullet()
|
||||||
|
|
||||||
if (bHit)
|
if (bHit)
|
||||||
{
|
{
|
||||||
//Damage boss
|
// Damage boss
|
||||||
if (gBoss[bos].bits & npc_shootable)
|
if (gBoss[bos].bits & npc_shootable)
|
||||||
{
|
{
|
||||||
if (gBoss[bos].cond & 0x10)
|
if (gBoss[bos].cond & 0x10)
|
||||||
|
|
|
@ -459,7 +459,7 @@ void ActBossChar_Core(void)
|
||||||
PlaySoundObject(101, 1);
|
PlaySoundObject(101, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( npc->act_wait > 400 )
|
if (npc->act_wait > 400)
|
||||||
{
|
{
|
||||||
npc->act_no = 200;
|
npc->act_no = 200;
|
||||||
gBoss[4].ani_no = 2;
|
gBoss[4].ani_no = 2;
|
||||||
|
|
|
@ -230,7 +230,7 @@ void ActBossChar_Ballos(void)
|
||||||
SetQuake2(30);
|
SetQuake2(30);
|
||||||
PlaySoundObject(44, 1);
|
PlaySoundObject(44, 1);
|
||||||
|
|
||||||
if ( gMC.y > npc->y + 0x6000 && gMC.x < npc->x + 0x3000 && gMC.x > npc->x - 0x3000 )
|
if (gMC.y > npc->y + 0x6000 && gMC.x < npc->x + 0x3000 && gMC.x > npc->x - 0x3000)
|
||||||
DamageMyChar(16);
|
DamageMyChar(16);
|
||||||
|
|
||||||
for (i = 0; i < 0x10; ++i)
|
for (i = 0; i < 0x10; ++i)
|
||||||
|
|
|
@ -183,7 +183,7 @@ void ActBossChar_Omega()
|
||||||
gBoss[5].cond = 0x80;
|
gBoss[5].cond = 0x80;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 20: //Rising out of the ground
|
case 20: // Rising out of the ground
|
||||||
gBoss[0].act_no = 30;
|
gBoss[0].act_no = 30;
|
||||||
gBoss[0].act_wait = 0;
|
gBoss[0].act_wait = 0;
|
||||||
gBoss[0].ani_no = 0;
|
gBoss[0].ani_no = 0;
|
||||||
|
@ -227,7 +227,7 @@ void ActBossChar_Omega()
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 50: //Open mouth
|
case 50: // Open mouth
|
||||||
if (++gBoss[0].count1 > 2)
|
if (++gBoss[0].count1 > 2)
|
||||||
{
|
{
|
||||||
gBoss[0].count1 = 0;
|
gBoss[0].count1 = 0;
|
||||||
|
@ -244,7 +244,7 @@ void ActBossChar_Omega()
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 60: //Shoot out of mouth
|
case 60: // Shoot out of mouth
|
||||||
if (++gBoss[0].act_wait > 20 && gBoss[0].act_wait < 80 && !(gBoss[0].act_wait % 3))
|
if (++gBoss[0].act_wait > 20 && gBoss[0].act_wait < 80 && !(gBoss[0].act_wait % 3))
|
||||||
{
|
{
|
||||||
if (Random(0, 9) < 8)
|
if (Random(0, 9) < 8)
|
||||||
|
@ -263,7 +263,7 @@ void ActBossChar_Omega()
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 70: //Close mouth
|
case 70: // Close mouth
|
||||||
if (++gBoss[0].count1 > 2)
|
if (++gBoss[0].count1 > 2)
|
||||||
{
|
{
|
||||||
gBoss[0].count1 = 0;
|
gBoss[0].count1 = 0;
|
||||||
|
@ -299,7 +299,7 @@ void ActBossChar_Omega()
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 90: //Go back into the ground
|
case 90: // Go back into the ground
|
||||||
SetQuake(2);
|
SetQuake(2);
|
||||||
gBoss[0].y += 0x200;
|
gBoss[0].y += 0x200;
|
||||||
|
|
||||||
|
@ -313,7 +313,7 @@ void ActBossChar_Omega()
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 100: //Move to proper position for coming out of the ground
|
case 100: // Move to proper position for coming out of the ground
|
||||||
if (++gBoss[0].act_wait == 120)
|
if (++gBoss[0].act_wait == 120)
|
||||||
{
|
{
|
||||||
gBoss[0].act_wait = 0;
|
gBoss[0].act_wait = 0;
|
||||||
|
|
|
@ -490,7 +490,7 @@ void ActBossChar_Twin(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( npc->count1 > 0x3FF )
|
if (npc->count1 > 0x3FF)
|
||||||
npc->count1 -= 0x400;
|
npc->count1 -= 0x400;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -55,7 +55,7 @@ static void ActBossChar03_01(NPCHAR *npc)
|
||||||
++npc->ani_no;
|
++npc->ani_no;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( npc->ani_no > 3 )
|
if (npc->ani_no > 3)
|
||||||
npc->ani_no = 2;
|
npc->ani_no = 2;
|
||||||
|
|
||||||
npc->xm -= 0x20;
|
npc->xm -= 0x20;
|
||||||
|
@ -100,7 +100,7 @@ static void ActBossChar03_01(NPCHAR *npc)
|
||||||
++npc->ani_no;
|
++npc->ani_no;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( npc->ani_no > 5 )
|
if (npc->ani_no > 5)
|
||||||
npc->ani_no = 4;
|
npc->ani_no = 4;
|
||||||
|
|
||||||
npc->xm += 0x20;
|
npc->xm += 0x20;
|
||||||
|
|
|
@ -186,7 +186,7 @@ void ActCaret05(CARET *crt)
|
||||||
++crt->ani_no;
|
++crt->ani_no;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( crt->ani_no > 6 )
|
if (crt->ani_no > 6)
|
||||||
crt->cond = 0;
|
crt->cond = 0;
|
||||||
|
|
||||||
crt->x += 0x80;
|
crt->x += 0x80;
|
||||||
|
@ -468,9 +468,8 @@ void ActCaret17(CARET *crt)
|
||||||
crt->rect = rcLeft[1];
|
crt->rect = rcLeft[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
//Tables
|
// Tables
|
||||||
CARET_TABLE gCaretTable[18] =
|
CARET_TABLE gCaretTable[18] = {
|
||||||
{
|
|
||||||
{0, 0},
|
{0, 0},
|
||||||
{0x800, 0x800},
|
{0x800, 0x800},
|
||||||
{0x1000, 0x1000},
|
{0x1000, 0x1000},
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#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
|
||||||
#define WINDOW_HEIGHT 240
|
#define WINDOW_HEIGHT 240
|
||||||
|
|
|
@ -11,21 +11,27 @@
|
||||||
#include "Tags.h"
|
#include "Tags.h"
|
||||||
#include "Types.h"
|
#include "Types.h"
|
||||||
|
|
||||||
bool LoadConfigData(CONFIG *conf)
|
static const char* const config_filename = "Config.dat"; // Not the original name
|
||||||
|
static const char* const config_magic = "DOUKUTSU20041206"; // Not the original name
|
||||||
|
|
||||||
|
BOOL LoadConfigData(CONFIG *conf)
|
||||||
{
|
{
|
||||||
//Clear old config data
|
//Clear old config data
|
||||||
memset(conf, 0, sizeof(CONFIG));
|
memset(conf, 0, sizeof(CONFIG));
|
||||||
|
|
||||||
//Get path
|
//Get path
|
||||||
char path[PATH_LENGTH];
|
char path[PATH_LENGTH];
|
||||||
sprintf(path, "%s/%s", gModulePath, "Config.dat");
|
sprintf(path, "%s/%s", gModulePath, config_filename);
|
||||||
|
|
||||||
//Open file
|
//Open file
|
||||||
FILE *fp = fopen(path, "rb");
|
FILE *fp = fopen(path, "rb");
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return false;
|
return FALSE;
|
||||||
|
|
||||||
//Read data
|
//Read data
|
||||||
|
#ifdef NONPORTABLE
|
||||||
|
size_t fread_result = fread(conf, sizeof(CONFIG), 1, fp); // Not the original name
|
||||||
|
#else
|
||||||
//Read the version id and font name
|
//Read the version id and font name
|
||||||
fread(conf->proof, sizeof(conf->proof), 1, fp);
|
fread(conf->proof, sizeof(conf->proof), 1, fp);
|
||||||
fread(conf->font_name, sizeof(conf->font_name), 1, fp);
|
fread(conf->font_name, sizeof(conf->font_name), 1, fp);
|
||||||
|
@ -42,23 +48,33 @@ bool LoadConfigData(CONFIG *conf)
|
||||||
conf->bJoystick = File_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] = File_ReadLE32(fp);
|
conf->joystick_button[button] = File_ReadLE32(fp);
|
||||||
|
#endif
|
||||||
|
|
||||||
//Close file
|
//Close file
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
//Check if version is correct, return that it succeeded
|
//Check if version is not correct, and return if it failed
|
||||||
if (!strcmp(conf->proof, "DOUKUTSU20041206"))
|
#ifdef NONPORTABLE
|
||||||
return true;
|
if (fread_result != 1 || strcmp(conf->proof, config_magic))
|
||||||
|
#else
|
||||||
|
if (strcmp(conf->proof, config_magic))
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
memset(conf, 0, sizeof(CONFIG));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
//If not, return that it failed
|
return TRUE;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultConfigData(CONFIG *conf)
|
void DefaultConfigData(CONFIG *conf)
|
||||||
{
|
{
|
||||||
//Claer old config data
|
//Clear old config data
|
||||||
memset(conf, 0, sizeof(CONFIG));
|
memset(conf, 0, sizeof(CONFIG));
|
||||||
|
|
||||||
|
//Fun fact: The Linux port added this line:
|
||||||
|
//conf->display_mode = 1;
|
||||||
|
|
||||||
//Reset joystick settings (as these can't simply be set to 0)
|
//Reset joystick settings (as these can't simply be set to 0)
|
||||||
conf->bJoystick = 1;
|
conf->bJoystick = 1;
|
||||||
conf->joystick_button[0] = 2;
|
conf->joystick_button[0] = 2;
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "WindowsWrapper.h"
|
||||||
|
|
||||||
struct CONFIG
|
struct CONFIG
|
||||||
{
|
{
|
||||||
char proof[0x20];
|
char proof[0x20];
|
||||||
|
@ -14,5 +16,5 @@ struct CONFIG
|
||||||
int32_t joystick_button[8];
|
int32_t joystick_button[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
bool LoadConfigData(CONFIG *conf);
|
BOOL LoadConfigData(CONFIG *conf);
|
||||||
void DefaultConfigData(CONFIG *conf);
|
void DefaultConfigData(CONFIG *conf);
|
||||||
|
|
64
src/Draw.cpp
64
src/Draw.cpp
|
@ -56,7 +56,7 @@ BOOL Flip_SystemTask()
|
||||||
if (!SystemTask())
|
if (!SystemTask())
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
//Framerate limiter
|
// Framerate limiter
|
||||||
static uint32_t timePrev;
|
static uint32_t timePrev;
|
||||||
const uint32_t timeNow = SDL_GetTicks();
|
const uint32_t timeNow = SDL_GetTicks();
|
||||||
|
|
||||||
|
@ -81,15 +81,15 @@ BOOL StartDirectDraw(int lMagnification, int lColourDepth)
|
||||||
{
|
{
|
||||||
(void)lColourDepth;
|
(void)lColourDepth;
|
||||||
|
|
||||||
//Initialize rendering
|
// Initialize rendering
|
||||||
SDL_InitSubSystem(SDL_INIT_VIDEO);
|
SDL_InitSubSystem(SDL_INIT_VIDEO);
|
||||||
|
|
||||||
//Create renderer
|
// Create renderer
|
||||||
gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED);
|
gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED);
|
||||||
|
|
||||||
if (gRenderer != NULL)
|
if (gRenderer != NULL)
|
||||||
{
|
{
|
||||||
//Print the name of the renderer SDL2 is using
|
// Print the name of the renderer SDL2 is using
|
||||||
SDL_RendererInfo info;
|
SDL_RendererInfo info;
|
||||||
SDL_GetRendererInfo(gRenderer, &info);
|
SDL_GetRendererInfo(gRenderer, &info);
|
||||||
printf("Renderer: %s\n", info.name);
|
printf("Renderer: %s\n", info.name);
|
||||||
|
@ -120,10 +120,10 @@ BOOL StartDirectDraw(int lMagnification, int lColourDepth)
|
||||||
|
|
||||||
void EndDirectDraw()
|
void EndDirectDraw()
|
||||||
{
|
{
|
||||||
//Quit sub-system
|
// Quit sub-system
|
||||||
SDL_QuitSubSystem(SDL_INIT_VIDEO);
|
SDL_QuitSubSystem(SDL_INIT_VIDEO);
|
||||||
|
|
||||||
//Release all surfaces
|
// Release all surfaces
|
||||||
for (int i = 0; i < SURFACE_ID_MAX; i++)
|
for (int i = 0; i < SURFACE_ID_MAX; i++)
|
||||||
ReleaseSurface(i);
|
ReleaseSurface(i);
|
||||||
}
|
}
|
||||||
|
@ -143,7 +143,7 @@ static bool IsEnableBitmap(SDL_RWops *fp)
|
||||||
|
|
||||||
void ReleaseSurface(int s)
|
void ReleaseSurface(int s)
|
||||||
{
|
{
|
||||||
//Release the surface we want to release
|
// Release the surface we want to release
|
||||||
if (surf[s].in_use)
|
if (surf[s].in_use)
|
||||||
{
|
{
|
||||||
SDL_DestroyTexture(surf[s].texture);
|
SDL_DestroyTexture(surf[s].texture);
|
||||||
|
@ -172,7 +172,7 @@ BOOL MakeSurface_Generic(int bxsize, int bysize, Surface_Ids surf_no)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Create surface
|
// Create surface
|
||||||
surf[surf_no].surface = SDL_CreateRGBSurfaceWithFormat(0, bxsize * magnification, bysize * magnification, 0, SDL_PIXELFORMAT_RGB24);
|
surf[surf_no].surface = SDL_CreateRGBSurfaceWithFormat(0, bxsize * magnification, bysize * magnification, 0, SDL_PIXELFORMAT_RGB24);
|
||||||
SDL_SetSurfaceBlendMode(surf[surf_no].surface, SDL_BLENDMODE_NONE);
|
SDL_SetSurfaceBlendMode(surf[surf_no].surface, SDL_BLENDMODE_NONE);
|
||||||
|
|
||||||
|
@ -320,7 +320,7 @@ static BOOL LoadBitmap_File(const char *name, Surface_Ids surf_no, bool create_s
|
||||||
char path[PATH_LENGTH];
|
char path[PATH_LENGTH];
|
||||||
SDL_RWops *fp;
|
SDL_RWops *fp;
|
||||||
|
|
||||||
//Attempt to load PBM
|
// Attempt to load PBM
|
||||||
sprintf(path, "%s/%s.pbm", gDataPath, name);
|
sprintf(path, "%s/%s.pbm", gDataPath, name);
|
||||||
fp = SDL_RWFromFile(path, "rb");
|
fp = SDL_RWFromFile(path, "rb");
|
||||||
if (fp)
|
if (fp)
|
||||||
|
@ -338,7 +338,7 @@ static BOOL LoadBitmap_File(const char *name, Surface_Ids surf_no, bool create_s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Attempt to load BMP
|
// Attempt to load BMP
|
||||||
sprintf(path, "%s/%s.bmp", gDataPath, name);
|
sprintf(path, "%s/%s.bmp", gDataPath, name);
|
||||||
fp = SDL_RWFromFile(path, "rb");
|
fp = SDL_RWFromFile(path, "rb");
|
||||||
if (fp)
|
if (fp)
|
||||||
|
@ -412,22 +412,22 @@ static SDL_Rect RectToSDLRectScaled(RECT *rect)
|
||||||
|
|
||||||
void BackupSurface(Surface_Ids surf_no, RECT *rect)
|
void BackupSurface(Surface_Ids surf_no, RECT *rect)
|
||||||
{
|
{
|
||||||
//Get renderer size
|
// Get renderer size
|
||||||
int w, h;
|
int w, h;
|
||||||
SDL_GetRendererOutputSize(gRenderer, &w, &h);
|
SDL_GetRendererOutputSize(gRenderer, &w, &h);
|
||||||
|
|
||||||
//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_RGB24);
|
SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormat(0, w, h, 0, SDL_PIXELFORMAT_RGB24);
|
||||||
SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_NONE);
|
SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_NONE);
|
||||||
SDL_RenderReadPixels(gRenderer, NULL, SDL_PIXELFORMAT_RGB24, surface->pixels, surface->pitch);
|
SDL_RenderReadPixels(gRenderer, NULL, SDL_PIXELFORMAT_RGB24, surface->pixels, surface->pitch);
|
||||||
|
|
||||||
//Get rects
|
// Get rects
|
||||||
SDL_Rect frameRect = RectToSDLRectScaled(rect);
|
SDL_Rect frameRect = RectToSDLRectScaled(rect);
|
||||||
|
|
||||||
SDL_BlitSurface(surface, &frameRect, surf[surf_no].surface, &frameRect);
|
SDL_BlitSurface(surface, &frameRect, surf[surf_no].surface, &frameRect);
|
||||||
surf[surf_no].needs_updating = true;
|
surf[surf_no].needs_updating = true;
|
||||||
|
|
||||||
//Free surface
|
// Free surface
|
||||||
SDL_FreeSurface(surface);
|
SDL_FreeSurface(surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -439,40 +439,39 @@ static void DrawBitmap(RECT *rcView, int x, int y, RECT *rect, Surface_Ids surf_
|
||||||
surf[surf_no].needs_updating = false;
|
surf[surf_no].needs_updating = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Get SDL_Rects
|
// Get SDL_Rects
|
||||||
SDL_Rect clipRect = RectToSDLRectScaled(rcView);
|
SDL_Rect clipRect = RectToSDLRectScaled(rcView);
|
||||||
|
|
||||||
SDL_Rect frameRect = RectToSDLRectScaled(rect);
|
SDL_Rect frameRect = RectToSDLRectScaled(rect);
|
||||||
|
|
||||||
//Get dest rect
|
// Get dest rect
|
||||||
SDL_Rect destRect = {x * magnification, y * magnification, frameRect.w, frameRect.h};
|
SDL_Rect destRect = {x * magnification, y * magnification, frameRect.w, frameRect.h};
|
||||||
|
|
||||||
//Set cliprect
|
// Set cliprect
|
||||||
SDL_RenderSetClipRect(gRenderer, &clipRect);
|
SDL_RenderSetClipRect(gRenderer, &clipRect);
|
||||||
|
|
||||||
SDL_SetTextureBlendMode(surf[surf_no].texture, transparent ? SDL_BLENDMODE_BLEND : SDL_BLENDMODE_NONE);
|
SDL_SetTextureBlendMode(surf[surf_no].texture, transparent ? SDL_BLENDMODE_BLEND : SDL_BLENDMODE_NONE);
|
||||||
|
|
||||||
//Draw to screen
|
// Draw to screen
|
||||||
if (SDL_RenderCopy(gRenderer, surf[surf_no].texture, &frameRect, &destRect) < 0)
|
if (SDL_RenderCopy(gRenderer, surf[surf_no].texture, &frameRect, &destRect) < 0)
|
||||||
printf("Failed to draw texture %d\nSDL Error: %s\n", surf_no, SDL_GetError());
|
printf("Failed to draw texture %d\nSDL Error: %s\n", surf_no, SDL_GetError());
|
||||||
|
|
||||||
//Undo cliprect
|
// Undo cliprect
|
||||||
SDL_RenderSetClipRect(gRenderer, NULL);
|
SDL_RenderSetClipRect(gRenderer, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PutBitmap3(RECT *rcView, int x, int y, RECT *rect, Surface_Ids 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, Surface_Ids 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Surface2Surface(int x, int y, RECT *rect, int to, int from)
|
void Surface2Surface(int x, int y, RECT *rect, int to, int from)
|
||||||
{
|
{
|
||||||
//Get rects
|
// Get rects
|
||||||
SDL_Rect rcSet = {x * magnification, y * magnification, (rect->right - rect->left) * magnification, (rect->bottom - rect->top) * magnification};
|
SDL_Rect rcSet = {x * magnification, y * magnification, (rect->right - rect->left) * magnification, (rect->bottom - rect->top) * magnification};
|
||||||
SDL_Rect frameRect = RectToSDLRectScaled(rect);
|
SDL_Rect frameRect = RectToSDLRectScaled(rect);
|
||||||
|
|
||||||
|
@ -488,10 +487,10 @@ unsigned long GetCortBoxColor(unsigned long col)
|
||||||
|
|
||||||
void CortBox(RECT *rect, uint32_t col)
|
void CortBox(RECT *rect, uint32_t col)
|
||||||
{
|
{
|
||||||
//Get rect
|
// Get rect
|
||||||
SDL_Rect destRect = RectToSDLRectScaled(rect);
|
SDL_Rect destRect = RectToSDLRectScaled(rect);
|
||||||
|
|
||||||
//Set colour and draw
|
// Set colour and draw
|
||||||
const unsigned char col_red = col & 0x0000FF;
|
const unsigned char col_red = col & 0x0000FF;
|
||||||
const unsigned char col_green = (col & 0x00FF00) >> 8;
|
const unsigned char col_green = (col & 0x00FF00) >> 8;
|
||||||
const unsigned char col_blue = (col & 0xFF0000) >> 16;
|
const unsigned char col_blue = (col & 0xFF0000) >> 16;
|
||||||
|
@ -501,10 +500,10 @@ void CortBox(RECT *rect, uint32_t col)
|
||||||
|
|
||||||
void CortBox2(RECT *rect, uint32_t col, Surface_Ids surf_no)
|
void CortBox2(RECT *rect, uint32_t col, Surface_Ids surf_no)
|
||||||
{
|
{
|
||||||
//Get rect
|
// Get rect
|
||||||
SDL_Rect destRect = RectToSDLRectScaled(rect);
|
SDL_Rect destRect = RectToSDLRectScaled(rect);
|
||||||
|
|
||||||
//Set colour and draw
|
// Set colour and draw
|
||||||
const unsigned char col_red = col & 0x0000FF;
|
const unsigned char col_red = col & 0x0000FF;
|
||||||
const unsigned char col_green = (col & 0x00FF00) >> 8;
|
const unsigned char col_green = (col & 0x00FF00) >> 8;
|
||||||
const unsigned char col_blue = (col & 0xFF0000) >> 16;
|
const unsigned char col_blue = (col & 0xFF0000) >> 16;
|
||||||
|
@ -558,7 +557,7 @@ static unsigned char* GetFontFromWindows(size_t *data_size, const char *font_nam
|
||||||
|
|
||||||
void InitTextObject(const char *font_name)
|
void InitTextObject(const char *font_name)
|
||||||
{
|
{
|
||||||
//Get font size
|
// Get font size
|
||||||
unsigned int fontWidth, fontHeight;
|
unsigned int fontWidth, fontHeight;
|
||||||
|
|
||||||
// The original did this, but Windows would downscale it to 5/10 anyway.
|
// The original did this, but Windows would downscale it to 5/10 anyway.
|
||||||
|
@ -568,10 +567,13 @@ void InitTextObject(const char *font_name)
|
||||||
fontHeight = 12;
|
fontHeight = 12;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{*/
|
{
|
||||||
|
fontWidth = 5 * magnification;
|
||||||
|
fontHeight = 10 * magnification;
|
||||||
|
}*/
|
||||||
|
|
||||||
fontWidth = 5 * magnification;
|
fontWidth = 5 * magnification;
|
||||||
fontHeight = 10 * magnification;
|
fontHeight = 10 * magnification;
|
||||||
// }
|
|
||||||
|
|
||||||
size_t data_size;
|
size_t data_size;
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
|
@ -632,7 +634,7 @@ void PutText2(int x, int y, const char *text, uint32_t color, Surface_Ids surf_n
|
||||||
|
|
||||||
void EndTextObject()
|
void EndTextObject()
|
||||||
{
|
{
|
||||||
//Destroy font
|
// Destroy font
|
||||||
UnloadFont(gFont);
|
UnloadFont(gFont);
|
||||||
gFont = NULL;
|
gFont = NULL;
|
||||||
}
|
}
|
||||||
|
|
140
src/Ending.cpp
140
src/Ending.cpp
|
@ -23,32 +23,32 @@ CREDIT Credit;
|
||||||
STRIP Strip[MAX_STRIP];
|
STRIP Strip[MAX_STRIP];
|
||||||
ILLUSTRATION Illust;
|
ILLUSTRATION Illust;
|
||||||
|
|
||||||
//Update casts
|
// Update casts
|
||||||
void ActionStripper()
|
void ActionStripper()
|
||||||
{
|
{
|
||||||
for (int s = 0; s < MAX_STRIP; s++)
|
for (int s = 0; s < MAX_STRIP; s++)
|
||||||
{
|
{
|
||||||
//Move up
|
// Move up
|
||||||
if (Strip[s].flag & 0x80 && Credit.mode)
|
if (Strip[s].flag & 0x80 && Credit.mode)
|
||||||
Strip[s].y -= 0x100;
|
Strip[s].y -= 0x100;
|
||||||
//Get removed when off-screen
|
// Get removed when off-screen
|
||||||
if (Strip[s].y <= -0x2000)
|
if (Strip[s].y <= -0x2000)
|
||||||
Strip[s].flag = 0;
|
Strip[s].flag = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Draw casts
|
// Draw casts
|
||||||
void PutStripper()
|
void PutStripper()
|
||||||
{
|
{
|
||||||
for (int s = 0; s < MAX_STRIP; s++)
|
for (int s = 0; s < MAX_STRIP; s++)
|
||||||
{
|
{
|
||||||
if (Strip[s].flag & 0x80)
|
if (Strip[s].flag & 0x80)
|
||||||
{
|
{
|
||||||
//Draw text
|
// Draw text
|
||||||
RECT rc = {0, 16 * s, 320, 16 * s + 16};
|
RECT rc = {0, 16 * s, 320, 16 * s + 16};
|
||||||
PutBitmap3(&grcFull, (Strip[s].x + ((WINDOW_WIDTH - 320) << 8)) / 0x200, Strip[s].y / 0x200, &rc, SURFACE_ID_CREDIT_CAST);
|
PutBitmap3(&grcFull, (Strip[s].x + ((WINDOW_WIDTH - 320) << 8)) / 0x200, Strip[s].y / 0x200, &rc, SURFACE_ID_CREDIT_CAST);
|
||||||
|
|
||||||
//Draw character
|
// Draw character
|
||||||
rc.left = 24 * (Strip[s].cast % 13);
|
rc.left = 24 * (Strip[s].cast % 13);
|
||||||
rc.right = rc.left + 24;
|
rc.right = rc.left + 24;
|
||||||
rc.top = 24 * (Strip[s].cast / 13);
|
rc.top = 24 * (Strip[s].cast / 13);
|
||||||
|
@ -58,21 +58,21 @@ void PutStripper()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Create a cast object
|
// Create a cast object
|
||||||
void SetStripper(int x, int y, const char *text, int cast)
|
void SetStripper(int x, int y, const char *text, int cast)
|
||||||
{
|
{
|
||||||
for (int s = 0; s < MAX_STRIP; s++)
|
for (int s = 0; s < MAX_STRIP; s++)
|
||||||
{
|
{
|
||||||
if (!(Strip[s].flag & 0x80))
|
if (!(Strip[s].flag & 0x80))
|
||||||
{
|
{
|
||||||
//Initialize cast property
|
// Initialize cast property
|
||||||
Strip[s].flag = 0x80;
|
Strip[s].flag = 0x80;
|
||||||
Strip[s].x = x;
|
Strip[s].x = x;
|
||||||
Strip[s].y = y;
|
Strip[s].y = y;
|
||||||
Strip[s].cast = cast;
|
Strip[s].cast = cast;
|
||||||
strcpy(Strip[s].str, text);
|
strcpy(Strip[s].str, text);
|
||||||
|
|
||||||
//Draw text
|
// Draw text
|
||||||
RECT rc = {0, 16 * s, 320, 16 * s + 16};
|
RECT rc = {0, 16 * s, 320, 16 * s + 16};
|
||||||
CortBox2(&rc, 0, SURFACE_ID_CREDIT_CAST);
|
CortBox2(&rc, 0, SURFACE_ID_CREDIT_CAST);
|
||||||
PutText2(0, 16 * s, text, RGB(0xFF, 0xFF, 0xFE), SURFACE_ID_CREDIT_CAST);
|
PutText2(0, 16 * s, text, RGB(0xFF, 0xFF, 0xFE), SURFACE_ID_CREDIT_CAST);
|
||||||
|
@ -81,7 +81,7 @@ void SetStripper(int x, int y, const char *text, int cast)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Regenerate cast text
|
// Regenerate cast text
|
||||||
void RestoreStripper()
|
void RestoreStripper()
|
||||||
{
|
{
|
||||||
for (int s = 0; s < MAX_STRIP; s++)
|
for (int s = 0; s < MAX_STRIP; s++)
|
||||||
|
@ -95,22 +95,22 @@ void RestoreStripper()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Handle the illustration
|
// Handle the illustration
|
||||||
void ActionIllust()
|
void ActionIllust()
|
||||||
{
|
{
|
||||||
switch (Illust.act_no)
|
switch (Illust.act_no)
|
||||||
{
|
{
|
||||||
case 0: //Off-screen to the left
|
case 0: // Off-screen to the left
|
||||||
Illust.x = -0x14000;
|
Illust.x = -0x14000;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: //Move in from the left
|
case 1: // Move in from the left
|
||||||
Illust.x += 0x5000;
|
Illust.x += 0x5000;
|
||||||
if (Illust.x > 0)
|
if (Illust.x > 0)
|
||||||
Illust.x = 0;
|
Illust.x = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: //Move out from the right
|
case 2: // Move out from the right
|
||||||
Illust.x -= 0x5000;
|
Illust.x -= 0x5000;
|
||||||
if (Illust.x < -0x14000)
|
if (Illust.x < -0x14000)
|
||||||
Illust.x = -0x14000;
|
Illust.x = -0x14000;
|
||||||
|
@ -118,7 +118,7 @@ void ActionIllust()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Draw illustration
|
// Draw illustration
|
||||||
void PutIllust()
|
void PutIllust()
|
||||||
{
|
{
|
||||||
RECT rcIllust = {0, 0, 160, 240};
|
RECT rcIllust = {0, 0, 160, 240};
|
||||||
|
@ -126,7 +126,7 @@ void PutIllust()
|
||||||
PutBitmap3(&rcClip, (Illust.x + ((WINDOW_WIDTH - 320) << 8)) / 0x200, (WINDOW_HEIGHT - 240) / 2, &rcIllust, SURFACE_ID_CREDITS_IMAGE);
|
PutBitmap3(&rcClip, (Illust.x + ((WINDOW_WIDTH - 320) << 8)) / 0x200, (WINDOW_HEIGHT - 240) / 2, &rcIllust, SURFACE_ID_CREDITS_IMAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Load illustration
|
// Load illustration
|
||||||
void ReloadIllust(int a)
|
void ReloadIllust(int a)
|
||||||
{
|
{
|
||||||
char name[16];
|
char name[16];
|
||||||
|
@ -134,10 +134,10 @@ void ReloadIllust(int a)
|
||||||
ReloadBitmap_Resource(name, SURFACE_ID_CREDITS_IMAGE);
|
ReloadBitmap_Resource(name, SURFACE_ID_CREDITS_IMAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Initialize and release credits
|
// Initialize and release credits
|
||||||
void InitCreditScript()
|
void InitCreditScript()
|
||||||
{
|
{
|
||||||
//Clear script state and casts
|
// Clear script state and casts
|
||||||
memset(&Credit, 0, sizeof(CREDIT));
|
memset(&Credit, 0, sizeof(CREDIT));
|
||||||
memset(Strip, 0, sizeof(Strip));
|
memset(Strip, 0, sizeof(Strip));
|
||||||
}
|
}
|
||||||
|
@ -146,23 +146,23 @@ void ReleaseCreditScript()
|
||||||
{
|
{
|
||||||
if (Credit.pData)
|
if (Credit.pData)
|
||||||
{
|
{
|
||||||
//Free script data
|
// Free script data
|
||||||
free(Credit.pData);
|
free(Credit.pData);
|
||||||
Credit.pData = NULL;
|
Credit.pData = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Start playing credits
|
// Start playing credits
|
||||||
bool StartCreditScript()
|
bool StartCreditScript()
|
||||||
{
|
{
|
||||||
//Clear previously existing credits data
|
// Clear previously existing credits data
|
||||||
if (Credit.pData)
|
if (Credit.pData)
|
||||||
{
|
{
|
||||||
free(Credit.pData);
|
free(Credit.pData);
|
||||||
Credit.pData = NULL;
|
Credit.pData = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Open file
|
// Open file
|
||||||
char path[PATH_LENGTH];
|
char path[PATH_LENGTH];
|
||||||
sprintf(path, "%s/%s", gDataPath, "Credit.tsc");
|
sprintf(path, "%s/%s", gDataPath, "Credit.tsc");
|
||||||
|
|
||||||
|
@ -170,7 +170,7 @@ bool StartCreditScript()
|
||||||
if (Credit.size == -1)
|
if (Credit.size == -1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
//Allcoate buffer data
|
// Allocate buffer data
|
||||||
Credit.pData = (char*)malloc(Credit.size);
|
Credit.pData = (char*)malloc(Credit.size);
|
||||||
if (Credit.pData == NULL)
|
if (Credit.pData == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
@ -182,7 +182,7 @@ bool StartCreditScript()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Read data
|
// Read data
|
||||||
fread(Credit.pData, 1, Credit.size, fp);
|
fread(Credit.pData, 1, Credit.size, fp);
|
||||||
EncryptionBinaryData2((uint8_t*)Credit.pData, Credit.size);
|
EncryptionBinaryData2((uint8_t*)Credit.pData, Credit.size);
|
||||||
|
|
||||||
|
@ -191,30 +191,30 @@ bool StartCreditScript()
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//Reset credits
|
// Reset credits
|
||||||
Credit.offset = 0;
|
Credit.offset = 0;
|
||||||
Credit.wait = 0;
|
Credit.wait = 0;
|
||||||
Credit.mode = 1;
|
Credit.mode = 1;
|
||||||
Illust.x = -0x14000;
|
Illust.x = -0x14000;
|
||||||
Illust.act_no = 0;
|
Illust.act_no = 0;
|
||||||
|
|
||||||
//Modify cliprect
|
// Modify cliprect
|
||||||
grcGame.left = WINDOW_WIDTH / 2;
|
grcGame.left = WINDOW_WIDTH / 2;
|
||||||
// These three are non-vanilla: for wide/tallscreen support
|
// 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));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Get number from text (4 digit)
|
// Get number from text (4 digit)
|
||||||
int GetScriptNumber(const char *text)
|
int GetScriptNumber(const char *text)
|
||||||
{
|
{
|
||||||
return 1000 * text[0] - 48000 +
|
return 1000 * text[0] - 48000 +
|
||||||
|
@ -223,19 +223,19 @@ int GetScriptNumber(const char *text)
|
||||||
text[3] - 48;
|
text[3] - 48;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Parse credits
|
// Parse credits
|
||||||
void ActionCredit_Read()
|
void ActionCredit_Read()
|
||||||
{
|
{
|
||||||
while (Credit.offset < Credit.size)
|
while (Credit.offset < Credit.size)
|
||||||
{
|
{
|
||||||
//Get character
|
// Get character
|
||||||
uint8_t character = Credit.pData[Credit.offset];
|
uint8_t character = Credit.pData[Credit.offset];
|
||||||
|
|
||||||
int a, b, len;
|
int a, b, len;
|
||||||
switch (character)
|
switch (character)
|
||||||
{
|
{
|
||||||
case '[': //Create cast
|
case '[': // Create cast
|
||||||
//Get the range for the cast text
|
// Get the range for the cast text
|
||||||
a = ++Credit.offset;
|
a = ++Credit.offset;
|
||||||
|
|
||||||
while (Credit.pData[a] != ']')
|
while (Credit.pData[a] != ']')
|
||||||
|
@ -248,35 +248,35 @@ void ActionCredit_Read()
|
||||||
|
|
||||||
len = a - Credit.offset;
|
len = a - Credit.offset;
|
||||||
|
|
||||||
//Copy the text to the cast text
|
// Copy the text to the cast text
|
||||||
char text[40];
|
char text[40];
|
||||||
memcpy(text, &Credit.pData[Credit.offset], a - Credit.offset);
|
memcpy(text, &Credit.pData[Credit.offset], a - Credit.offset);
|
||||||
text[len] = 0;
|
text[len] = 0;
|
||||||
|
|
||||||
//Get cast id
|
// Get cast id
|
||||||
Credit.offset = a + 1;
|
Credit.offset = a + 1;
|
||||||
len = GetScriptNumber(&Credit.pData[a + 1]);
|
len = GetScriptNumber(&Credit.pData[a + 1]);
|
||||||
|
|
||||||
//Create cast object
|
// Create cast object
|
||||||
SetStripper(Credit.start_x, (WINDOW_HEIGHT << 9) + 0x1000, text, len);
|
SetStripper(Credit.start_x, (WINDOW_HEIGHT << 9) + 0x1000, text, len);
|
||||||
|
|
||||||
//Change offset
|
// Change offset
|
||||||
Credit.offset += 4;
|
Credit.offset += 4;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 'j': //Jump to label
|
case 'j': // Jump to label
|
||||||
//Get number
|
// Get number
|
||||||
b = GetScriptNumber(&Credit.pData[++Credit.offset]);
|
b = GetScriptNumber(&Credit.pData[++Credit.offset]);
|
||||||
|
|
||||||
//Change offset
|
// Change offset
|
||||||
Credit.offset += 4;
|
Credit.offset += 4;
|
||||||
|
|
||||||
//Jump to specific label
|
// Jump to specific label
|
||||||
while (Credit.offset < Credit.size)
|
while (Credit.offset < Credit.size)
|
||||||
{
|
{
|
||||||
if (Credit.pData[Credit.offset] == 'l')
|
if (Credit.pData[Credit.offset] == 'l')
|
||||||
{
|
{
|
||||||
//what is this
|
// What is this
|
||||||
a = GetScriptNumber(&Credit.pData[++Credit.offset]);
|
a = GetScriptNumber(&Credit.pData[++Credit.offset]);
|
||||||
Credit.offset += 4;
|
Credit.offset += 4;
|
||||||
if (b == a)
|
if (b == a)
|
||||||
|
@ -294,29 +294,29 @@ void ActionCredit_Read()
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case '~': //Start fading out music
|
case '~': // Start fading out music
|
||||||
++Credit.offset;
|
++Credit.offset;
|
||||||
SetOrganyaFadeout();
|
SetOrganyaFadeout();
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 'f': //Flag jump
|
case 'f': // Flag jump
|
||||||
//Read numbers XXXX:YYYY
|
// Read numbers XXXX:YYYY
|
||||||
a = GetScriptNumber(&Credit.pData[++Credit.offset]);
|
a = GetScriptNumber(&Credit.pData[++Credit.offset]);
|
||||||
Credit.offset += 5;
|
Credit.offset += 5;
|
||||||
b = GetScriptNumber(&Credit.pData[Credit.offset]);
|
b = GetScriptNumber(&Credit.pData[Credit.offset]);
|
||||||
Credit.offset += 4;
|
Credit.offset += 4;
|
||||||
|
|
||||||
//If flag is set
|
// If flag is set
|
||||||
if (GetNPCFlag(a))
|
if (GetNPCFlag(a))
|
||||||
{
|
{
|
||||||
//Jump to label
|
// Jump to label
|
||||||
while ( Credit.offset < Credit.size )
|
while (Credit.offset < Credit.size)
|
||||||
{
|
{
|
||||||
if (Credit.pData[Credit.offset] == 'l')
|
if (Credit.pData[Credit.offset] == 'l')
|
||||||
{
|
{
|
||||||
a = GetScriptNumber(&Credit.pData[++Credit.offset]);
|
a = GetScriptNumber(&Credit.pData[++Credit.offset]);
|
||||||
Credit.offset += 4;
|
Credit.offset += 4;
|
||||||
if ( b == a )
|
if (b == a)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (IsShiftJIS(Credit.pData[Credit.offset]))
|
else if (IsShiftJIS(Credit.pData[Credit.offset]))
|
||||||
|
@ -331,39 +331,39 @@ void ActionCredit_Read()
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case '+': //Change casts x-position
|
case '+': // Change casts x-position
|
||||||
Credit.start_x = GetScriptNumber(&Credit.pData[++Credit.offset]) << 9;
|
Credit.start_x = GetScriptNumber(&Credit.pData[++Credit.offset]) << 9;
|
||||||
Credit.offset += 4;
|
Credit.offset += 4;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case '-': //Wait for X amount of frames
|
case '-': // Wait for X amount of frames
|
||||||
Credit.wait = GetScriptNumber(&Credit.pData[++Credit.offset]);
|
Credit.wait = GetScriptNumber(&Credit.pData[++Credit.offset]);
|
||||||
Credit.offset += 4;
|
Credit.offset += 4;
|
||||||
Credit.mode = 2;
|
Credit.mode = 2;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case '/': //Stop credits
|
case '/': // Stop credits
|
||||||
Credit.mode = 0;
|
Credit.mode = 0;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case '!': //Change music
|
case '!': // Change music
|
||||||
a = GetScriptNumber(&Credit.pData[++Credit.offset]);
|
a = GetScriptNumber(&Credit.pData[++Credit.offset]);
|
||||||
Credit.offset += 4;
|
Credit.offset += 4;
|
||||||
ChangeMusic(a);
|
ChangeMusic(a);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Progress through file
|
// Progress through file
|
||||||
++Credit.offset;
|
++Credit.offset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Update credits
|
// Update credits
|
||||||
void ActionCredit()
|
void ActionCredit()
|
||||||
{
|
{
|
||||||
if (Credit.offset < Credit.size)
|
if (Credit.offset < Credit.size)
|
||||||
{
|
{
|
||||||
//Update script, or if waiting, decrement the wait value
|
// Update script, or if waiting, decrement the wait value
|
||||||
if (Credit.mode == 1)
|
if (Credit.mode == 1)
|
||||||
{
|
{
|
||||||
ActionCredit_Read();
|
ActionCredit_Read();
|
||||||
|
@ -375,28 +375,28 @@ void ActionCredit()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Change illustration
|
// Change illustration
|
||||||
void SetCreditIllust(int a)
|
void SetCreditIllust(int a)
|
||||||
{
|
{
|
||||||
ReloadIllust(a);
|
ReloadIllust(a);
|
||||||
Illust.act_no = 1;
|
Illust.act_no = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Slide illustration off-screen
|
// Slide illustration off-screen
|
||||||
void CutCreditIllust()
|
void CutCreditIllust()
|
||||||
{
|
{
|
||||||
Illust.act_no = 2;
|
Illust.act_no = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Scene of the island falling
|
// Scene of the island falling
|
||||||
int Scene_DownIsland(int mode)
|
int Scene_DownIsland(int mode)
|
||||||
{
|
{
|
||||||
//Setup background
|
// Setup background
|
||||||
RECT rc_frame = {(WINDOW_WIDTH - 160) / 2, (WINDOW_HEIGHT - 80) / 2, (WINDOW_WIDTH + 160) / 2, (WINDOW_HEIGHT + 80) / 2};
|
RECT rc_frame = {(WINDOW_WIDTH - 160) / 2, (WINDOW_HEIGHT - 80) / 2, (WINDOW_WIDTH + 160) / 2, (WINDOW_HEIGHT + 80) / 2};
|
||||||
RECT rc_sky = {0, 0, 160, 80};
|
RECT rc_sky = {0, 0, 160, 80};
|
||||||
RECT rc_ground = {160, 48, 320, 80};
|
RECT rc_ground = {160, 48, 320, 80};
|
||||||
|
|
||||||
//Setup island
|
// Setup island
|
||||||
RECT rc_sprite = {160, 0, 200, 24};
|
RECT rc_sprite = {160, 0, 200, 24};
|
||||||
|
|
||||||
ISLAND_SPRITE sprite;
|
ISLAND_SPRITE sprite;
|
||||||
|
@ -405,10 +405,10 @@ int Scene_DownIsland(int mode)
|
||||||
|
|
||||||
for (int wait = 0; wait < 900; wait++)
|
for (int wait = 0; wait < 900; wait++)
|
||||||
{
|
{
|
||||||
//Get pressed keys
|
// Get pressed keys
|
||||||
GetTrg();
|
GetTrg();
|
||||||
|
|
||||||
//Escape menu
|
// Escape menu
|
||||||
if (gKey & 0x8000)
|
if (gKey & 0x8000)
|
||||||
{
|
{
|
||||||
int escRet = Call_Escape();
|
int escRet = Call_Escape();
|
||||||
|
@ -421,7 +421,7 @@ int Scene_DownIsland(int mode)
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
//Move down
|
// Move down
|
||||||
sprite.y += 0x33;
|
sprite.y += 0x33;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -432,38 +432,38 @@ int Scene_DownIsland(int mode)
|
||||||
{
|
{
|
||||||
if (wait >= 600)
|
if (wait >= 600)
|
||||||
{
|
{
|
||||||
//End scene
|
// End scene
|
||||||
if (wait == 750)
|
if (wait == 750)
|
||||||
wait = 900;
|
wait = 900;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Move down slow
|
// Move down slow
|
||||||
sprite.y += 0xC;
|
sprite.y += 0xC;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Move down slower
|
// Move down slower
|
||||||
sprite.y += 0x19;
|
sprite.y += 0x19;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Move down at normal speed
|
// Move down at normal speed
|
||||||
sprite.y += 0x33;
|
sprite.y += 0x33;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//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, SURFACE_ID_LEVEL_SPRITESET_1);
|
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, 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, SURFACE_ID_LEVEL_SPRITESET_1);
|
||||||
PutBitmap3(&rc_frame, 80 + (WINDOW_WIDTH - 320) / 2, 128 + (WINDOW_HEIGHT - 240) / 2, &rc_ground, SURFACE_ID_LEVEL_SPRITESET_1);
|
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
|
||||||
PutFramePerSecound();
|
PutFramePerSecound();
|
||||||
if (!Flip_SystemTask())
|
if (!Flip_SystemTask())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -33,7 +33,7 @@ struct ISLAND_SPRITE
|
||||||
int y;
|
int y;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_STRIP (WINDOW_HEIGHT / 16) + 1
|
#define MAX_STRIP ((WINDOW_HEIGHT / 16) + 1)
|
||||||
|
|
||||||
void ActionStripper();
|
void ActionStripper();
|
||||||
void PutStripper();
|
void PutStripper();
|
||||||
|
|
|
@ -13,33 +13,33 @@ int Call_Escape()
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
//Get pressed keys
|
// Get pressed keys
|
||||||
GetTrg();
|
GetTrg();
|
||||||
|
|
||||||
if (gKeyTrg & KEY_ESCAPE) //Escape is pressed, quit game
|
if (gKeyTrg & KEY_ESCAPE) // Escape is pressed, quit game
|
||||||
{
|
{
|
||||||
gKeyTrg = 0;
|
gKeyTrg = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (gKeyTrg & KEY_F1) //F1 is pressed, continue
|
if (gKeyTrg & KEY_F1) // F1 is pressed, continue
|
||||||
{
|
{
|
||||||
gKeyTrg = 0;
|
gKeyTrg = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (gKeyTrg & KEY_F2) //F2 is pressed, reset
|
if (gKeyTrg & KEY_F2) // F2 is pressed, reset
|
||||||
{
|
{
|
||||||
gKeyTrg = 0;
|
gKeyTrg = 0;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Draw screen
|
// Draw screen
|
||||||
CortBox(&grcFull, 0x000000);
|
CortBox(&grcFull, 0x000000);
|
||||||
PutBitmap3(&grcFull, (WINDOW_WIDTH - 208) / 2, (WINDOW_HEIGHT - 16) / 2, &rc, SURFACE_ID_TEXT_BOX);
|
PutBitmap3(&grcFull, (WINDOW_WIDTH - 208) / 2, (WINDOW_HEIGHT - 16) / 2, &rc, SURFACE_ID_TEXT_BOX);
|
||||||
PutFramePerSecound();
|
PutFramePerSecound();
|
||||||
|
|
||||||
if (!Flip_SystemTask())
|
if (!Flip_SystemTask())
|
||||||
{
|
{
|
||||||
//Quit if window is closed
|
// Quit if window is closed
|
||||||
gKeyTrg = 0;
|
gKeyTrg = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,7 @@ BOOL LoadMapData2(const char *path_map)
|
||||||
BOOL LoadAttributeData(const char *path_atrb)
|
BOOL LoadAttributeData(const char *path_atrb)
|
||||||
{
|
{
|
||||||
//Open file
|
//Open file
|
||||||
char path[260];
|
char path[PATH_LENGTH];
|
||||||
sprintf(path, "%s/%s", gDataPath, path_atrb);
|
sprintf(path, "%s/%s", gDataPath, path_atrb);
|
||||||
|
|
||||||
FILE *fp = fopen(path, "rb");
|
FILE *fp = fopen(path, "rb");
|
||||||
|
|
|
@ -53,14 +53,14 @@ void SetUniqueParameter(NPCHAR *npc)
|
||||||
npc->view.bottom = gNpcTable[code].view.bottom << 9;
|
npc->view.bottom = gNpcTable[code].view.bottom << 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LoadEvent(const char *path_event)
|
BOOL LoadEvent(const char *path_event)
|
||||||
{
|
{
|
||||||
char path[PATH_LENGTH];
|
char path[PATH_LENGTH];
|
||||||
sprintf(path, "%s/%s", gDataPath, path_event);
|
sprintf(path, "%s/%s", gDataPath, path_event);
|
||||||
|
|
||||||
FILE *fp = fopen(path, "rb");
|
FILE *fp = fopen(path, "rb");
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return false;
|
return FALSE;
|
||||||
|
|
||||||
//Read "PXE" check
|
//Read "PXE" check
|
||||||
char code[4];
|
char code[4];
|
||||||
|
@ -71,7 +71,7 @@ bool LoadEvent(const char *path_event)
|
||||||
// The original game forgot to close the file here
|
// The original game forgot to close the file here
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
#endif
|
#endif
|
||||||
return false;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Get amount of NPCs
|
//Get amount of NPCs
|
||||||
|
@ -128,7 +128,7 @@ bool LoadEvent(const char *path_event)
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetNpChar(int code_char, int x, int y, int xm, int ym, int dir, NPCHAR *npc, int start_index)
|
void SetNpChar(int code_char, int x, int y, int xm, int ym, int dir, NPCHAR *npc, int start_index)
|
||||||
|
@ -235,7 +235,7 @@ void SetExpObjects(int x, int y, int exp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SetBulletObject(int x, int y, int val)
|
BOOL SetBulletObject(int x, int y, int val)
|
||||||
{
|
{
|
||||||
int tamakazu_ari[10];
|
int tamakazu_ari[10];
|
||||||
|
|
||||||
|
@ -254,7 +254,7 @@ bool SetBulletObject(int x, int y, int val)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!t)
|
if (!t)
|
||||||
return false;
|
return FALSE;
|
||||||
|
|
||||||
n = Random(1, 10 * t);
|
n = Random(1, 10 * t);
|
||||||
int bullet_no = tamakazu_ari[n % t];
|
int bullet_no = tamakazu_ari[n % t];
|
||||||
|
@ -272,14 +272,14 @@ bool SetBulletObject(int x, int y, int val)
|
||||||
gNPC[n].bits = gNpcTable[gNPC[n].code_char].bits;
|
gNPC[n].bits = gNpcTable[gNPC[n].code_char].bits;
|
||||||
gNPC[n].exp = val;
|
gNPC[n].exp = val;
|
||||||
SetUniqueParameter(&gNPC[n]);
|
SetUniqueParameter(&gNPC[n]);
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SetLifeObject(int x, int y, int val)
|
BOOL SetLifeObject(int x, int y, int val)
|
||||||
{
|
{
|
||||||
for (int n = 0x100; n < NPC_MAX; n++)
|
for (int n = 0x100; n < NPC_MAX; n++)
|
||||||
{
|
{
|
||||||
|
@ -294,11 +294,11 @@ bool SetLifeObject(int x, int y, int val)
|
||||||
gNPC[n].bits = gNpcTable[gNPC[n].code_char].bits;
|
gNPC[n].bits = gNpcTable[gNPC[n].code_char].bits;
|
||||||
gNPC[n].exp = val;
|
gNPC[n].exp = val;
|
||||||
SetUniqueParameter(&gNPC[n]);
|
SetUniqueParameter(&gNPC[n]);
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VanishNpChar(NPCHAR *npc)
|
void VanishNpChar(NPCHAR *npc)
|
||||||
|
|
|
@ -83,13 +83,13 @@ extern int gSuperXpos;
|
||||||
extern int gSuperYpos;
|
extern int gSuperYpos;
|
||||||
|
|
||||||
void InitNpChar();
|
void InitNpChar();
|
||||||
bool LoadEvent(const char *path_event);
|
BOOL LoadEvent(const char *path_event);
|
||||||
void SetNpChar(int code_char, int x, int y, int xm, int ym, int dir, NPCHAR *npc, int start_index);
|
void SetNpChar(int code_char, int x, int y, int xm, int ym, int dir, NPCHAR *npc, int start_index);
|
||||||
void SetDestroyNpChar(int x, int y, int w, int num);
|
void SetDestroyNpChar(int x, int y, int w, int num);
|
||||||
void SetDestroyNpCharUp(int x, int y, int w, int num);
|
void SetDestroyNpCharUp(int x, int y, int w, int num);
|
||||||
void SetExpObjects(int x, int y, int exp);
|
void SetExpObjects(int x, int y, int exp);
|
||||||
bool SetBulletObject(int x, int y, int val);
|
BOOL SetBulletObject(int x, int y, int val);
|
||||||
bool SetLifeObject(int x, int y, int val);
|
BOOL SetLifeObject(int x, int y, int val);
|
||||||
void VanishNpChar(NPCHAR *npc);
|
void VanishNpChar(NPCHAR *npc);
|
||||||
void PutNpChar(int fx, int fy);
|
void PutNpChar(int fx, int fy);
|
||||||
void ActNpChar();
|
void ActNpChar();
|
||||||
|
|
|
@ -132,7 +132,7 @@ const STAGE_TABLE gTMT[95] = {
|
||||||
BOOL TransferStage(int no, int w, int x, int y)
|
BOOL TransferStage(int no, int w, int x, int y)
|
||||||
{
|
{
|
||||||
//Move character
|
//Move character
|
||||||
SetMyCharPosition(x << 13, y << 13);
|
SetMyCharPosition(x * 0x10 * 0x200, y * 0x10 * 0x200);
|
||||||
|
|
||||||
BOOL bError = FALSE;
|
BOOL bError = FALSE;
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ BOOL TransferStage(int no, int w, int x, int y)
|
||||||
bError = TRUE;
|
bError = TRUE;
|
||||||
|
|
||||||
//Load background
|
//Load background
|
||||||
strcpy(path, gTMT[no].back);
|
sprintf(path, "%s", gTMT[no].back);
|
||||||
if (!InitBack(path, gTMT[no].bkType))
|
if (!InitBack(path, gTMT[no].bkType))
|
||||||
bError = TRUE;
|
bError = TRUE;
|
||||||
|
|
||||||
|
@ -183,12 +183,8 @@ BOOL TransferStage(int no, int w, int x, int y)
|
||||||
bError = TRUE;
|
bError = TRUE;
|
||||||
|
|
||||||
if (bError)
|
if (bError)
|
||||||
{
|
|
||||||
printf("Failed to load stage %d\n", no);
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//Load map name
|
//Load map name
|
||||||
ReadyMapName(gTMT[no].name);
|
ReadyMapName(gTMT[no].name);
|
||||||
|
|
||||||
|
@ -202,9 +198,6 @@ BOOL TransferStage(int no, int w, int x, int y)
|
||||||
ResetFlash();
|
ResetFlash();
|
||||||
gStageNo = no;
|
gStageNo = no;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Music
|
//Music
|
||||||
|
@ -264,8 +257,9 @@ int gMusicNo;
|
||||||
|
|
||||||
void ChangeMusic(int no)
|
void ChangeMusic(int no)
|
||||||
{
|
{
|
||||||
if (!no || no != gMusicNo)
|
if (no && no == gMusicNo)
|
||||||
{
|
return;
|
||||||
|
|
||||||
//Stop and keep track of old song
|
//Stop and keep track of old song
|
||||||
gOldPos = GetOrganyaPosition();
|
gOldPos = GetOrganyaPosition();
|
||||||
gOldNo = gMusicNo;
|
gOldNo = gMusicNo;
|
||||||
|
@ -279,7 +273,6 @@ void ChangeMusic(int no)
|
||||||
SetOrganyaPosition(0);
|
SetOrganyaPosition(0);
|
||||||
PlayOrganyaMusic();
|
PlayOrganyaMusic();
|
||||||
gMusicNo = no;
|
gMusicNo = no;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReCallMusic()
|
void ReCallMusic()
|
||||||
|
|
|
@ -112,7 +112,7 @@ void EncryptionBinaryData2(uint8_t *pData, int size)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Load generic .tsc
|
//Load generic .tsc
|
||||||
bool LoadTextScript2(const char *name)
|
BOOL LoadTextScript2(const char *name)
|
||||||
{
|
{
|
||||||
//Get path
|
//Get path
|
||||||
char path[260];
|
char path[260];
|
||||||
|
@ -120,12 +120,12 @@ bool LoadTextScript2(const char *name)
|
||||||
|
|
||||||
gTS.size = GetFileSizeLong(path);
|
gTS.size = GetFileSizeLong(path);
|
||||||
if (gTS.size == -1)
|
if (gTS.size == -1)
|
||||||
return false;
|
return FALSE;
|
||||||
|
|
||||||
//Open file
|
//Open file
|
||||||
FILE *fp = fopen(path, "rb");
|
FILE *fp = fopen(path, "rb");
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return false;
|
return FALSE;
|
||||||
|
|
||||||
//Read data
|
//Read data
|
||||||
fread(gTS.data, 1, gTS.size, fp);
|
fread(gTS.data, 1, gTS.size, fp);
|
||||||
|
@ -137,11 +137,11 @@ bool LoadTextScript2(const char *name)
|
||||||
|
|
||||||
//Decrypt data
|
//Decrypt data
|
||||||
EncryptionBinaryData2((uint8_t*)gTS.data, gTS.size);
|
EncryptionBinaryData2((uint8_t*)gTS.data, gTS.size);
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Load stage .tsc
|
//Load stage .tsc
|
||||||
bool LoadTextScript_Stage(const char *name)
|
BOOL LoadTextScript_Stage(const char *name)
|
||||||
{
|
{
|
||||||
//Open Head.tsc
|
//Open Head.tsc
|
||||||
char path[PATH_LENGTH];
|
char path[PATH_LENGTH];
|
||||||
|
@ -149,11 +149,11 @@ bool LoadTextScript_Stage(const char *name)
|
||||||
|
|
||||||
long head_size = GetFileSizeLong(path);
|
long head_size = GetFileSizeLong(path);
|
||||||
if (head_size == -1)
|
if (head_size == -1)
|
||||||
return false;
|
return FALSE;
|
||||||
|
|
||||||
FILE *fp = fopen(path, "rb");
|
FILE *fp = fopen(path, "rb");
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return false;
|
return FALSE;
|
||||||
|
|
||||||
//Read Head.tsc
|
//Read Head.tsc
|
||||||
fread(gTS.data, 1, head_size, fp);
|
fread(gTS.data, 1, head_size, fp);
|
||||||
|
@ -166,11 +166,11 @@ bool LoadTextScript_Stage(const char *name)
|
||||||
|
|
||||||
long body_size = GetFileSizeLong(path);
|
long body_size = GetFileSizeLong(path);
|
||||||
if (body_size == -1)
|
if (body_size == -1)
|
||||||
return false;
|
return FALSE;
|
||||||
|
|
||||||
fp = fopen(path, "rb");
|
fp = fopen(path, "rb");
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return false;
|
return FALSE;
|
||||||
|
|
||||||
//Read stage's tsc
|
//Read stage's tsc
|
||||||
fread(&gTS.data[head_size], 1, body_size, fp);
|
fread(&gTS.data[head_size], 1, body_size, fp);
|
||||||
|
@ -181,7 +181,7 @@ bool LoadTextScript_Stage(const char *name)
|
||||||
//Set parameters
|
//Set parameters
|
||||||
gTS.size = head_size + body_size;
|
gTS.size = head_size + body_size;
|
||||||
strcpy(gTS.path, name);
|
strcpy(gTS.path, name);
|
||||||
return true;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Get current path
|
//Get current path
|
||||||
|
|
|
@ -60,8 +60,8 @@ 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(const char *name);
|
BOOL LoadTextScript2(const char *name);
|
||||||
bool LoadTextScript_Stage(const char *name);
|
BOOL LoadTextScript_Stage(const char *name);
|
||||||
void GetTextScriptPath(char *path);
|
void GetTextScriptPath(char *path);
|
||||||
BOOL StartTextScript(int no);
|
BOOL StartTextScript(int no);
|
||||||
void StopTextScript();
|
void StopTextScript();
|
||||||
|
|
Loading…
Add table
Reference in a new issue