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